Я создаю приложение с рельсами, Rspotify и Angular. Пользователь аутентифицируется с помощью Spotify, они ищут музыку, добавляют музыку в плейлисты (делают плейлисты), а затем эту информацию хранят в PostgreSQL. Я создаю API для всех этих данных и показываю его с помощью Angular.Пользовательские значения Omniauth возвращают null
Я получил возможность работать с музыкой и музыкой. Я работаю над созданием модели пользователя и пользователя, но я ничего не делаю правильно, когда речь идет о сеансах и аутентификации пользователя. Я перенаправляюсь на правильный путь и не вижу никаких ошибок, но мой код возвращает
{
"country": null,
"display_name": null,
"email": null,
"images": null,
"product": null,
"external_urls": null,
"href": null,
"id": null,
"type": null,
"uri": null
}
Это мой код;
routes.rb
root to: "home#index"
#auth
get '/auth/:spotify/callback', to: 'sessions#create', via: [:get, :post]
resources :users
get '/home', to: 'users#home'
users_controller.rb
class UsersController < ApplicationController
# user's home, where current null data is
def home
@spotify_user = RSpotify::User.new
render :json => @spotify_user
end
def music
@music = RSpotify::Track.search(params[:search])
render :json => @music
end
end
sessions_controller.rb
class SessionsController < ApplicationController
def create
auth = request.env["omniauth.auth"]
@spotify_user = RSpotify::User.new(:provider => auth['provider'],
:uid => auth['uid'].to_s) || User.create_with_omniauth(auth)
reset_session
redirect_to "/home", :notice => "Authenticated!"
end
#sign out
def destroy
session[:user_id] = nil
redirect_to root_url, notice: "Signed out!"
end
end
users.rb
class User < ActiveRecord::Base
def self.from_omniauth(auth)
where(auth.slice("provider", "uid")).first || create_from_omniauth(auth)
end
def self.create_from_omniauth(auth)
create! do |user|
user.provider = auth["provider"]
user.uid = auth["uid"]
user.name = auth["info"]["nickname"]
end
end
end
Я также заметил, что я не получаю uid
от Spotify. Когда я побежал render :text => "<pre>" + env["omniauth.auth"].to_yaml and return
в моем sessions#create
, он вернулся обратно информацию, но uid
был пустым. Для справки, единственным руководством, которое я смог использовать, является RailsCasts 241 Simple Omniauth. У меня была эта проблема на некоторое время, и я знаю, что я sooooo близко к вычислению, потому что у меня, наконец, есть нулевые ошибки и вы можете видеть данные. Если бы кто-то сделал что-то подобное раньше и мог указать мне в правильном направлении, я был бы вне его благодарен. Спасибо за любую помощь.
спасибо. Итак, контроллер сеансов и пользовательская модель не взаимодействуют с Rspotify? Это просто сохранение информации пользователя rspotify в БД? Если я сниму rspotify и сделаю его '@spotify_user = User.new', а затем оставим остальную часть моего кода как есть? Извините, я думаю, что я это слишком ... – user3749994