0

我收到來自Facebook的電子郵件,表示我的rails應用程序正在使用v2.0 api,它將被棄用。所以我更新了這樣的寶石。只有當api版本已超過v2.2時,omniauth-facebook錯誤

- 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 "https://stackoverflow.com/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,但它沒有奏效。 from v2.2,它的工作原理是

我的問題是這樣的。

  1. 爲什麼omniauth-facebook在默認配置設置下不使用v2.6?
  2. 我該如何解決這個問題?我搜索了這種erros,但在我的情況下,日誌不會精確顯示錯誤消息。 (OAuth2 :: Error,:實際上是空的

回答

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 } 
相關問題