我正试图在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)
这是一个非常常见的错误;我做了研究并尝试了所有的解决方案(大多数是几个月前),但都没有。这就是我的尝试:
http://localhost:3000/
omniauth-facebook must pass either a
代码parameter or a signed request (via
signed_request parameter or a
fbsr_XXX cookie)
我还应该怎么办? (我认为关键在于Javascript,现在我有了相同的视频代码,使用CoffeeScript)。提前谢谢!
答案 0 :(得分:17)
我刚刚关注了Railscast,并设法使其正常运行。您会注意到有人在讨论您的问题in the comments。根据那里的链接,我最终得到了这个issue on Github和question on StackOverflow。
我建议在最终结果时更新到1.6.0
和2.0.0
。在此期间,请确保您没有犯下任何错误:
在两个不同的初始值设定项中定义您的应用凭据,通常为omniauth.rb
和devise.rb
。 source
您的实际网站与您的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 =>真} 强>