3

我正在开发一个Ruby on Rails的Web应用程序。我使用authlogic进行身份验证。我的网站有自己的登录,但我希望也可以使用Facebook。我尝试了authlogic_facebook_connect(使用Facebooker)。在很多打嗝后(文档还没有完全保留),我确实获得了authlogic_facebook_connect的工作,并没有问题。当我遇到以前从未使用过网站的用户时,默认的“连接”行为可以很好地工作,但这会导致为Facebook和我的网站使用不同电子邮件地址的人员进行大量重复登录。这就是我想要的:Ruby on Rails:Authlogic Facebook集成:链接帐户与用户输入,而不是自动使用电子邮件地址

当用户点击Facebook的“连接”按钮(并且在他们通过点击'允许'的Facebook身份验证步骤后),我想要一个框弹出询问用户是否他们想要连接到我的网站上的预先存在的帐户,或者他们想要为他们自动生成一个帐户。

如果他们想为它们自动生成,我们很好,我们照常进行,但如果 - 另一方面,他们想要将他们的Facebook帐户链接到我的网站上的帐户,我真的想要他们输入他们的本地凭证并找到正确的帐户。换句话说,我不要希望我的解决方案自动找出哪个帐户看起来像是正确的,我希望用户这样做。

是否有任何gem/plugin /快速入侵,这将允许我使用authlogic_facebook_connect或OAuth或其他方法来解决这个问题?

--David

回答

3

别人也许能在这个完美的宝石指向你,但我可以告诉你,我已经在类似的问题的工作,这是没有太多的工作要撸起自己的,基于oauth2宝石。

下面是我使用的代码/流程的草图。

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数据。

请注意,这只是一个小品,也有错误的情况来处理(例如facebook_callback将与帕拉姆error_reason被击中如果get_acccess_token失败),我不建议你这样做就在你的控制器中的所有的oauth2互动,但基本的想法就在那里。

请参阅http://developers.facebook.com/docs/authentication/如果任何oauth2交互没有意义。

+0

优秀。这是完美的。非常感谢。你知道是否存在访问令牌以便在会话的后续重用它? – DavidH 2010-12-23 01:40:36

相关问题