仅当 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 开始,它有效。
我的问题是这样的。
- 为什么 omniauth-facebook 在默认配置设置下不使用 v2.6?
- 我该如何解决这个问题?我用谷歌搜索了这种错误,但就我而言,日志没有准确显示错误消息。 (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 }
我收到来自 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 开始,它有效。
我的问题是这样的。
- 为什么 omniauth-facebook 在默认配置设置下不使用 v2.6?
- 我该如何解决这个问题?我用谷歌搜索了这种错误,但就我而言,日志没有准确显示错误消息。 (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 }