ошибка omniauth-facebook только тогда, когда версия API выше v2.2

Я получил электронное письмо от facebook о том, что мое приложение rails использует API версии 2.0, и оно будет объявлено устаревшим. поэтому я обновил драгоценный камень следующим образом.

-    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

Я понизил версию конфигурации до версии 2.3, но это не сработало. начиная с версии 2.2 работает.

Мой вопрос таков.

  1. почему omniauth-facebook не использует v2.6 в настройках конфигурации по умолчанию?
  2. Как я могу решить эту проблему? Я гуглил такие ошибки, но в моем случае в журнале не отображаются сообщения об ошибках точно. (OAuth2::Error, : на самом деле пусто)

person kikiki.blue    schedule 26.07.2016    source источник


Ответы (1)


Я нашел ответ здесь. 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 }
person kikiki.blue    schedule 26.07.2016