/ / omniauth-facebook erro somente quando a versão da API é superior à v2.2 - ruby-on-rails, facebook, facebook-graph-api, ideal, omniauth-facebook

erro omniauth-facebook somente quando a versão api é sobre v2.2 - ruby-on-rails, facebook, facebook-graph-api, legenda, omniauth-facebook

Eu recebi um e-mail do facebook informando que meu aplicativo Rails está usando a API v2.0 e será preterido. então eu atualizei a gema assim.

-    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)

Não atualizei o omniauth-oauth2 por causa de alguns problemas não resolvidos.

depois disso, altero alguns códigos de exibição obsoletos. e mudei minha configuração e reinicie o servidor.

config.omniauth :facebook, APP_ID, APP_SECRET, scope: "email", info_fields: "email,name"

Funcionou bem, mas a versão da API do Facebook ainda estava na versão 2.0. então eu pesquisei e encontrei isso. https://github.com/mkdynamic/omniauth-facebook#api-version diz que sua versão padrão é a v2.6, mas não sei por que ele ainda usa a v2.0. de qualquer maneira, mudei o código de configuração assim.

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"
}

mas não funcionou. log é assim.

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

Fiz o downgrade da versão de configuração para a v2.3, mas ela não funcionou. da v2.2, funciona.

Minha pergunta é essa.

  1. por que o omniauth-facebook não usa a v2.6 na configuração padrão?
  2. Como posso resolver este problema? Pesquisei esse tipo de erro no Google, mas no meu caso, o log não mostra as mensagens de erro com precisão. (OAuth2 :: Erro,: realmente vago)

Respostas:

3 para resposta № 1

Encontrei a resposta aqui. https://github.com/mkdynamic/omniauth-facebook/issues/204

Eu vi esse post antes, mas eu o ignorei. solução é adicionar token_params: { parse: :json } para configurar assim.

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 }