仅当 api 版本超过 v2.2 时才会出现 omniauth-facebook 错误

omniauth-facebook error only when api version is over v2.2

我收到来自 Facebook 的电子邮件,说我的 rails 应用程序正在使用 v2.0 api,它将被弃用。所以我像这样更新了gem。

-    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。所以我用谷歌搜索并找到了这个。 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 开始,它有效

我的问题是这样的。

  1. 为什么 omniauth-facebook 在默认配置设置下不使用 v2.6?
  2. 我该如何解决这个问题?我用谷歌搜索了这种错误,但就我而言,日志没有准确显示错误消息。 (OAuth2::Error, : 实际空缺)

我在这里找到了答案。 https://github.com/mkdynamic/omniauth-facebook/issues/204

我以前看过这个 post 但我忽略了它。 解决方案是像这样将 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 }