【问题标题】:Rails + omniauth + facebook - csrf detectedRails + omniauth + facebook - 检测到 csrf
【发布时间】:2012-08-15 14:16:58
【问题描述】:

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

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

但是有一个奇怪的问题。 只有如果我登录到我注册了一个应用程序的 facebook 帐户,它就可以完美运行。

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

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

宝石

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)

你的想法?

【问题讨论】:

    标签: facebook ruby-on-rails-3.2 omniauth


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

    对我来说,我需要将 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-facebook gem 版本 1.6.0 上。

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

    【讨论】:

      【解决方案3】:

      我在删除 '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
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多