4

我正在通过现有facebook帐户登录网站。所以我注册了一个 facebook 应用程序并将apisecret存储在文件中。然后我用+来实现这个。它工作完美。development.rbproduction.rbomniauth-facebook gemdevise gem

顺便说一句,用户可以通过内部身份验证(通过设计)或使用 facebook 帐户登录。

然而有一个奇怪的问题。只有当我在注册应用程序时登录到 Facebook 帐户时,它才能完美运行。

所以我注册了另一个在我的 Rails 应用程序中没有使用应用程序的 Facebook 帐户并尝试登录。它导致错误“发生错误。请稍后再试。” ... “无法通过 Facebook 帐户对您进行身份验证,因为“检测到 Csrf””

我尝试使用 1.4.0 omniauth-facebook gem 而不是 1.4.1,但它也导致了错误“ must pass either acode parameter or a signed request (viasigned_request parameter or afbsr_XXX cookie)

宝石

oauth2 (0.8.0) 
omniauth (1.1.0) 
omniauth-oauth2 (1.1.0) 
omniauth-facebook (1.4.1) 
warden (1.2.1)
devise (2.1.2)

你的想法?

4

3 回答 3

8

我也遇到了这个问题,结果我的 Facebook 应用程序中仍然启用了“沙盒”模式。听起来这也可能是您的问题:)

如果没有,您能否发布任何相关的日志条目?

于 2012-08-20T16:39:02.243 回答
4

对我来说,我需要添加provider_ignores_state: true到我的 Omniauth 配置中:

config.omniauth :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET'], {
  strategy_class: OmniAuth::Strategies::Facebook,
  provider_ignores_state: true
}

这是在omniauth-facebookgem 版本 1.6.0 上。

https://github.com/mkdynamic/omniauth-facebook/issues/73上还有更多信息

于 2014-02-20T21:58:23.083 回答
0

我在删除“omniauth.rb”时解决了这个问题,因为我在 devise.rb 中已经有了这个配置:

  config.omniauth :facebook, ENV["FB_ID"], ENV["FB_SECRET"],
    scope: 'email',
    info_fields: 'email, first_name, last_name',
    image_size: 'large',  # 50x50, guaranteed ratio
    secure_image_url: true

记得重启服务器进行测试。

于 2017-08-28T20:49:24.887 回答