我收到来自facebook的电子邮件,我的rails应用程序正在使用v2.0 api,它将被弃用。所以我像这样更新了宝石。
- devise (3.5.6)
+ devise (4.2.0)
- oauth2 (1.1.0)
+ oauth2 (1.2.0)
omniauth-facebook (3.0.0)
omniauth-oauth2 (1.3.1)
由于一些未解决的问题,我没有对omniauth-oauth2进行版本升级。
之后,我更改了一些已弃用的视图代码。并更改了我的配置并重启服务器。
config.omniauth :facebook, APP_ID, APP_SECRET, scope: 'email', info_fields: 'email,name'
它运作良好,但facebook api版本仍然是v2.0。所以我用Google搜索并找到了这个。 https://github.com/mkdynamic/omniauth-facebook#api-version说它的默认版本是v2.6,但我不知道为什么它仍然使用v2.0。无论如何,我改变了这样的配置代码。
config.omniauth :facebook, APP_ID, APP_SECRET, scope: 'email', info_fields: 'email,name', client_options: {
site: 'https://graph.facebook.com/v2.6',
authorize_url: "https://www.facebook.com/v2.6/dialog/oauth"
}
但它不起作用。日志是这样的。
Started GET "/users/auth/facebook/callback?code=verylogcode&state=stateblabla" for 127.0.0.1 at 2016-07-26 22:52:03 +0900
(facebook) Callback phase initiated.
(facebook) Authentication failure! invalid_credentials: OAuth2::Error, :
{"access_token":"very_long_token_value","token_type":"bearer","expires_in":5160039}
Processing by OmniauthCallbacksController#failure as HTML
我将配置版本降级为v2.3,但它无法正常工作。 从v2.2起,它可以正常工作。
我的问题是这个。
答案 0 :(得分:3)
我在这里找到了答案。 https://github.com/mkdynamic/omniauth-facebook/issues/204
之前我看过这篇文章,但我忽略了它。
解决方案是将token_params: { parse: :json }
添加到这样的配置中。
config.omniauth :facebook, APP_ID, APP_SECRET, scope: 'email', info_fields: 'email,name', client_options: {
site: 'https://graph.facebook.com/v2.6',
authorize_url: "https://www.facebook.com/v2.6/dialog/oauth"
}, token_params: { parse: :json }