注册用户首次使用Facebook登录 - Omniauth
问题描述:
我遵循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
末
答
而不是做这个的,你能不能只检查是否有另一位用户在用Facebook注册时使用相同的电子邮件?如果是这样,请添加Facebook作为第二种身份验证方法,如果没有,请创建一个新帐户。