Ruby on Rails:Authlogic Facebook集成:将帐户与用户输入链接,而不是自动使用电子邮件地址
-
12-10-2019 - |
题
我正在Ruby上开发一个Web应用程序。我正在使用authlogic进行身份验证。我的网站有自己的登录名,但我希望也能使用Facebook。我尝试了Authlogic_facebook_connect(使用Facebooker)。经过很多打ic(文档并没有完全保存),我确实得到了authlogic_facebook_connect工作,这还可以。当我面对以前从未乘坐网站使用的用户时,默认的“连接”行为非常有效,但是对于使用不同的电子邮件地址为Facebook和我的网站使用不同的电子邮件地址的人,这会导致很多重复的登录。这是我想要的:
当用户键入Facebook“ Connect”按钮(以及他们通过单击“允许”的Facebook auth步骤之后),我希望弹出一个框,询问用户是否要连接到我的预先存在的帐户网站或他们想自动为其生成一个帐户。
如果他们希望它自动为他们生成,我们是很好的,我们会正常进行,但是 - 另一方面 - 他们想将其Facebook帐户链接到我网站上的帐户,我实际上希望他们进入他们的本地证书并找到正确的帐户。换句话说,我 不要 希望我的解决方案自动找出哪个帐户看起来像正确的帐户,我希望用户执行此操作。
是否有GEM /插件 /快速黑客攻击可以让我使用Authlogic_facebook_connect或Oauth或其他其他内容来实现此功能?
- 大卫
解决方案
其他人也许可以为您指出完美的宝石,但是我可以告诉您,我在一个类似的问题上工作了,根据OAuth2 Gem,滚动我们的工作并不多。
这是我使用的代码/流的草图。
1)用户单击“连接到Facebook”,这将您发送到这样的动作
def to_facebook
options = {
:redirect_uri => facebook_callback_url,
:scope => "email,publish_stream" # whatever you want to do
}
client = OAuth2::Client.new(FACEBOOK_API_KEY, FACEBOOK_API_SECRET, :site => FACEBOOK_API_SITE)
redirect_to client.web_server.authorize_url(options)
end
2)用户转到Facebook并为您提供所需的所有访问权限,然后Facebook调用您指定的回调 facebook_callback_url
这应该带您采取这样的措施:
def facebook_callback
client = OAuth2::Client.new(FACEBOOK_API_KEY, FACEBOOK_API_SECRET, :site => FACEBOOK_API_SITE)
access_token = client.web_server.get_access_token(params[:code], :redirect_uri => facebook_callback_url)
do_my_custom_user_association(access_token)
end
那么您可以指定您想要的任何内容 do_my_custom_user_association
, ,你应该有一个 current_user
如果有人登录,则可以从Authlogic中获得,因此您可以重定向到一个流程,该流程可以让登录用户选择是否要合并到他们的当前帐户或另一个帐户中。如果没有当前用户,则可以将它们发送到创建帐户流,并附上一些Facebook数据。
请注意,这只是一个草图,有错误的情况要处理(例如,将使用param点击Facebook_callback error_reason
如果是 get_acccess_token
失败),我不建议您在控制器中进行所有OAUTH2交互,但是基本想法就在那里。
看 http://developers.facebook.com/docs/authentication/ 如果任何OAuth2交互作用都没有意义。