3

我正在用 Ruby on Rails 开发一个 Web 应用程序。我正在使用 authlogic 进行身份验证。我的网站有自己的登录名,但我希望也能使用 Facebook。我尝试了 authlogic_facebook_connect(使用 Facebooker)。在经历了很多麻烦之后(文档还没有完全跟上),我确实让 authlogic_facebook_connect 工作了,没关系。当我面对以前从未使用过网站的用户时,默认的“连接”行为非常有效,但它会导致为 Facebook 和我的网站使用不同电子邮件地址的人重复登录。这就是我想要的:

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

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

是否有任何 gem / plugin / quick hack 可以让我使用 authlogic_facebook_connect 或 OAuth 或其他东西来完成这个?

- 大卫

4

1 回答 1

3

其他人可能会为此向您指出完美的 gem,但我可以告诉您,我已经解决了类似的问题,并且基于 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 数据。

请注意,这只是一个草图,有一些错误情况需要处理(例如,error_reason如果get_acccess_token失败,facebook_callback 将被参数击中),我不建议您在控制器中进行所有 oauth2 交互,但基本想法就在那里.

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

于 2010-12-22T19:17:34.937 回答