与omniauth-facebook的Rails Facebook登录错误 - OmniAuth :: Strategies :: OAuth2 :: CallbackError

时间:2012-11-16 23:06:52

标签: ruby-on-rails facebook oauth-2.0 omniauth

我正试图在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. 检查网站网址为http://localhost:3000/
  3. 检查应用程序ID和应用程序密钥
  4. omniauth-facebook gem降级为1.4,并将此错误抛给我:omniauth-facebook must pass either a代码parameter or a signed request (via signed_request parameter or a fbsr_XXX cookie)
  5. 降级到Rails 3.2.8
  6. 我还应该怎么办? (我认为关键在于Javascript,现在我有了相同的视频代码,使用CoffeeScript)。提前谢谢!

2 个答案:

答案 0 :(得分:17)

我刚刚关注了Railscast,并设法使其正常运行。您会注意到有人在讨论您的问题in the comments。根据那里的链接,我最终得到了这个issue on Githubquestion on StackOverflow

我建议在最终结果时更新到1.6.02.0.0。在此期间,请确保您没有犯下任何错误:

  • 在两个不同的初始值设定项中定义您的应用凭据,通常为omniauth.rbdevise.rbsource

  • 您的实际网站与您的Facebook应用程序中配置的网站网址之间的域名不匹配。 source

  • 将Facebook应用程序保留在沙盒模式下,因此域名与生产名称不匹配。 source

  • 向OmniauthCallbacksController或ApplicationController添加before_filter :authenticate(因为OmniauthCallbacksController继承自ApplicationController)。 source

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

  • state参数混淆。

答案 1 :(得分:0)

没有降级的解决方案(现在使用1.5.1):

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