【问题标题】:Devise integration with Facebook AppCenter设计与 Facebook AppCenter 的集成
【发布时间】:2012-07-26 11:45:00
【问题描述】:

我有一个通过 oauth2 devise/warden/omniauth 与 facebook 集成的应用程序。一切正常,我很满意。

现在我正在尝试将该应用程序与新的 facebook appcenter 集成,这基本上似乎解决了让用户 pre 在访问我的网站之前对其进行身份验证。

基本上,用户以类似

的 url 结尾
/?fb_appcenter=1&code=xxxxxx

但设计'omniauthcontroller 正在等待不同的 url,即

/users/auth/facebook/callback

我尝试执行一个简单的重定向,将代码查询参数传递到回调 url,但我收到“无效凭据”错误。

我认为问题可能是在 oauth2 facebook 策略中用于获取 access_token 的调用中使用的 redirect_uri 与 facebook 本身用于生成初始代码的那个不对应,但我不知道我是如何应该改变这一点。

过去有人提出过建议或解决过这个问题吗?

为了物有所值,我使用的是旧版本的 devise (1.4) 和omniauth (0.3),但大致方向应该是什么,即使使用新版本,也足够了。

【问题讨论】:

    标签: ruby-on-rails facebook devise omniauth


    【解决方案1】:

    在将代码交换为令牌时,代码是在经过身份验证的引用中创建的,redirect_uri 值需要与用户被带到的 URL 相同。 在App Center documentation 上有一个关于此效果的注释:

    使用查询字符串设置时的特殊注意事项:

    如果您想在 App Center 中使用服务器端身份验证流程,请务必确保在将代码交换为访问令牌时正确传递 redirect_uri 参数。您应该将 redirect_uri 参数设置为您网站的点击后到达网址。在大多数情况下,URL 看起来像:

    http://www.example.com/?fb_appcenter=1&fb_source=search&code=CODE_HERE 因此,您应该将 redirect_uri 设置为相同的值。请确保此逻辑是动态的,因为附加到您的点击后到达网址的查询参数可能会发生变化。

    【讨论】:

    • 是的,但是我如何说服omniauth/devise 使用与默认使用不同的redirect_uri(我认为是'',空字符串)
    【解决方案2】:

    事实证明这对于旧版本的omniauth 是不可能的,因为redirect_uri 是硬编码的,但一个合理的技巧是将用户重定向到标准的身份验证回调(例如/auth/facebook/callback)。

    这将再次对用户进行身份验证,但由于他已经向您提供了凭据,因此它只会通过。

    替代方案,也是我最终做的,是从 OA 的 facebook 策略中获取代码并重新实现一些 OAuth2 功能,基本上是在您正在使用的登录页面中将代码与访问令牌交换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      相关资源
      最近更新 更多