我使用最新的Omniauth Facebook
gem收到以下错误:
ERROR -- omniauth: (facebook) Authentication failure! invalid_credentials: OAuth2::Error, :
我的凭据是正确的,我似乎打得好,但回调错误了。
有什么想法吗?
答案 0 :(得分:3)
我遇到的问题是我的应用程序使用的是旧版本的facebook API。 Omniauth-facebook使用默认的API版本,在我的情况下2.4,但我的应用程序需要更新的版本,因为这就是它在我的Facebook Developer Console中所说的。在我的情况下,我所要做的就是将omniauth-facebook gem更新到4.0版本。
如果您希望可以设置要使用的Facebook API版本,而不是使用默认值(omniauth-facebook docs):
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
答案 1 :(得分: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
答案 2 :(得分:1)
如果您不是直接使用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进行身份验证之类的内容...”
答案 3 :(得分:0)
请尝试提供尽可能多的详细信息,尝试具体说明您的问题以更深入地了解该问题。这将有助于找出确切的问题和答案。
由于您不确定问题所在。经过很多次尝试和研究后,我得到了我的答案。
我的错误
export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
在以下情况下,我面临上述问题:如果通过注册自己的详细信息进行身份验证的Facebook用户在他的Facebook个人资料中仅具有手机号码和没有电子邮件ID ,因为我的应用正在验证在创建任何User对象之前应该存在的电子邮件ID。
因为对于在个人资料中具有电子邮件ID的用户,相同的代码可以正常工作。
尽管Facebook错误应该更具体,这可以节省开发人员调试确切问题的时间。