8

我正在尝试在 Rails 3.2.9 中使用omniauth-facebook 登录Facebook;我在http://railscasts.com/episodes/360-facebook-authentication中遵循了 Ryan Bates 的步骤,此时此刻我拥有相同的代码。

如果我尝试在没有 Javascript 的情况下登录,它可以工作(它会将我带到 Facebook,我授予权限,并成功让我回到应用程序),但如果我尝试使用 Javascript(用于 Facebook 弹出窗口),它最初会显示弹出窗口登录,但随后进行重定向并向我抛出此错误(不要求权限):

Started GET "/auth/facebook/callback" for 127.0.0.1 at 2012-11-16 15:16:03 -0600
(facebook) Callback phase initiated.
(facebook) Authentication failure! invalid_credentials: OmniAuth::Strategies::OAuth2::CallbackError, OmniAuth::Strategies::OAuth2::CallbackError

OmniAuth::Strategies::OAuth2::CallbackError (OmniAuth::Strategies::OAuth2::CallbackError)

这是一个非常常见的错误;我进行了研究并尝试了所有解决方案(主要是几个月前的),但它们都不起作用。这是我尝试过的:

  1. 检查 Facebook 中的沙箱已禁用(我已经等待了几个小时的传播)
  2. 检查站点 URLhttp://localhost:3000/
  3. 检查 App ID 和 App Secret
  4. 将omniauth-facebook gem降级到1.4,并抛出这个错误:omniauth-facebook must pass either acode parameter or a signed request (viasigned_request parameter or afbsr_XXXcookie)
  5. 降级到 Rails 3.2.8

我还应该做什么?(我认为关键在于 Javascript,而现在我拥有与 CoffeeScript 相同的视频代码)。提前致谢!

4

2 回答 2

17

我刚刚关注了那个 Railscast 并设法让它工作。您会注意到人们在评论中讨论您的问题。按照那里的链接,我最终在 Github上解决了这个问题,在 StackOverflow上解决了这个问题。

我建议在它最终发布时更新到1.6.0和到。2.0.0同时,请确保您没有犯以下任何错误:

  • 在两个不同的初始化程序中定义您的应用程序凭据,通常是omniauth.rbdevise.rb. 资源

  • 您的实时站点与您的 Facebook 应用程序中配置的站点 URL 之间的域名不匹配。资源

  • 让 facebook 应用程序处于沙盒模式,因此域名与生产域名不匹配。资源

  • 将 a 添加before_filter :authenticate到 OmniauthCallbacksController 或 ApplicationController(因为 OmniauthCallbacksController 继承自 ApplicationController)。资源

  • 与 Facebook 的客户端流程结合使用omniauth-facebook资源

  • state参数混淆。

于 2012-11-22T18:27:07.187 回答
0

无需降级的解决方案(现在使用 1.5.1):

https://github.com/intridea/omniauth-oauth2/issues/32 -> 将此添加到您的提供商声明中:provider :facebook, xxxxxxxxx, yyyyyyyyy, {:provider_ignores_state => true}

于 2013-12-19T20:07:24.810 回答