我遵循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
末