我正在使用rails,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
我也注意到,我沒有收到來自Spotify的一個uid
。當我跑 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 2014-08-30 22:20:09