2011-11-28 64 views
0

我遵循Ryan的關於Omniauth here的說明。註冊用戶首次使用Facebook登錄 - Omniauth

但是,有一個情況,瑞安沒有涵蓋: 用戶已經有一個帳戶,但他們第一次登錄Facebook/Linkedin。在這種情況下,我希望用戶使用傳統登錄(通過Devise)進行登錄,如果成功,請爲將來的登錄創建一個新的身份驗證對象。

特別是,當註冊用戶第一次點擊「Signin with Facebook」時,我會從包含他的Facebook帳戶信息的回調中獲得散列。但我不想爲他創建一個身份驗證。相反,我會將他重定向到我的Devise登錄頁面,允許他輸入用戶名和密碼。如果他成功登錄,我想從我從Facebook回調獲得的信息中創建一個新的Authentication對象。

在用戶登錄成功之前,暫時存儲Facebook哈希值的好方法是什麼?

謝謝。

下面是從AuthenticationController.rb,瑞安創建的代碼,它沒有處理我剛纔所說的情況:

def create 
    omniauth = request.env["omniauth.auth"] 

authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid']) 
if authentication 
    flash[:notice] = "Signed in successfully." 
    sign_in_and_redirect(:user, authentication.user) 
elsif current_user 
    current_user.authentications.create!(:provider => omniauth['provider'], :uid => omniauth['uid']) 
    flash[:notice] = "Authentication successful." 
    redirect_to authentications_url 
else 
    user = User.new 
    user.apply_omniauth(omniauth) 
    if user.save 
    flash[:notice] = "Signed in successfully." 
    sign_in_and_redirect(:user, user) 
    else 
    session[:omniauth] = omniauth 
    redirect_to new_user_registration_url 
    end 
end 

回答

0

而不是做這個的,你能不能只檢查是否有另一位用戶在用Facebook註冊時使用相同的電子郵件?如果是這樣,請添加Facebook作爲第二種身份驗證方法,如果沒有,請創建一個新帳戶。

相關問題