【问题标题】:ERROR -- omniauth: (facebook) Authentication failure错误——omniauth:(facebook)身份验证失败
【发布时间】:2017-08-27 17:12:25
【问题描述】:

使用最新的Omniauth Facebook gem 时出现以下错误:

ERROR -- omniauth: (facebook) Authentication failure! invalid_credentials: OAuth2::Error, :

我的凭据是正确的,我似乎可以点击 facebook,但回调错误。

有什么想法吗?

【问题讨论】:

标签: ruby-on-rails omniauth-facebook


【解决方案1】:

我遇到的问题是我的应用使用的是旧版本的 facebook API。 Omniauth-facebook 使用默认的 API 版本,在我的例子中是 2.4,但我的应用程序需要更新的版本,因为这就是它在我的 Facebook 开发者控制台中所说的。就我而言,我所要做的就是将omniauth-facebook gem 更新到4.0 版。

如果您希望可以设置您想要使用的 Facebook API 版本,而不是像这样使用默认值(omniauth-facebook 文档):

use OmniAuth::Builder do
  provider :facebook, ENV['APP_ID'], ENV['APP_SECRET'],
    client_options: {
      site: 'https://graph.facebook.com/v3.0',  # this is the example API version
      authorize_url: "https://www.facebook.com/v3.0/dialog/oauth"
    }
end

您可以前往 Facebook 开发者控制台查看您的应用正在使用哪个 API 版本。

您可以在此处阅读有关 omniauth-facebook gem API 的更多信息: http://www.rubydoc.info/gems/omniauth-facebook/4.0.0#API_Version

【讨论】:

  • 这在本地修复了它,但对于实时应用程序,我仍然遇到问题。我的测试应用程序是 API v2.8,但我的实时应用程序是 v2.6 我猜这是问题所在。知道如何升级实时应用 API 吗?
  • 尝试设置 API,使其与您的实际应用相匹配。
  • 据我所知,无法从开发人员门户中更改 API 版本。
  • 像我在回答中建议的那样在初始化程序中设置它。将 v3.0 更改为 v2.6。
  • 我在 devise.rb 文件中将其设置为以下内容:config.omniauth :facebook, Rails.application.secrets.facebook_id, Rails.application.secrets.facebook_secret, info_fields: 'email,name,birthday', :client_options => { :site => 'https://graph.facebook.com/v2.6', :authorize_url => "https://www.facebook.com/v2.6/dialog/oauth" } 在本地与设置为 2.8 的测试应用程序一起正常工作,但对于 2.6 的实时应用程序没有任何效果
【解决方案2】:

我遇到了同样的问题,但指定版本对我没有帮助。我最终通过token_params: { parse: :json } 解决了我的问题:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, Figaro.env.fb_appid, Figaro.env.fb_sec,
           { scope: 'email',  token_params: { parse: :json } }
end

我找到了参考#174 comment

【讨论】:

    【解决方案3】:

    如果您不直接将 gem 用作中间件,而是在 config/initializers/devise.rb 中配置您的选项(如 the guide in Devise's wiki suggests),您可以通过在配置选项中添加 token_params: { parse: :json } 来解决此问题。

    所以,在config/initializers/devise.rb

    config.omniauth :facebook, "APP_ID", "APP_SECRET", token_params: { parse: :json }

    这个问题在上面链接的 Devise 的 wiki 中得到了明确的处理(请参阅“如果您看到无法从 Facebook 对您进行身份验证之类的内容,因为“凭据无效”...)

    【讨论】:

      【解决方案4】:

      请尽量提供尽可能多的细节,尽量具体说明您的问题,以便更深入地了解问题。这将有助于找出确切的问题和答案。

      因为您没有具体说明您的问题。我把我经过多次尝试和研究后得到的答案放在这里。

      我的错误

      ERROR -- omniauth: (facebook) Authentication failure! invalid_credentials: OAuth2::Error, {"message"=>"Cannot call API for app 67878******** on behalf of user sa97**********", "type"=>"OAuthException", "code"=>200, "fbtrace_id"=>"8987987*********"}:
      

      如果通过使用他/她的详细信息进行身份验证的 Facebook 用户在他/她的 Facebook 个人资料中只有手机号码并且没有电子邮件 ID,我遇到了上述问题,因为我的应用正在验证电子邮件 ID 是否应该在创建任何用户对象之前存在。

      因为相同的代码适用于个人资料中具有电子邮件 ID 的用户。

      虽然 Facebook 错误应该更具体,这样可以节省开发人员调试确切问题的时间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多