Окончательное перенаправление для FB.login из Facebook JavaScript SDK завершается сбоем, отображается и возвращается ошибка

Пользователи могли войти на мой веб-сайт, используя свою учетную запись Facebook, но затем он внезапно перестал работать должным образом.

Я использую следующий стандартный код Facebook JavaScript SDK:

window.fbAsyncInit = function() {
  FB.init({
    appId      : '<MY_APP_ID>',
    status     : true, // check login status immediately
    cookie     : true, // enable cookies to allow the server to access the session
    xfbml      : false // because I don't use XFBML
  });
  FB.login(function(response) {
    // code that deals with `response`, whether null or not
  });
}

Но если бы я очистил кеш браузера и активировал этот код (после загрузки библиотеки Facebook), произошло бы следующее:

  1. Появится диалоговое окно входа в Facebook.
  2. После ввода учетных данных пользователя, имеющего доступ к этому приложению Facebook, появится диалоговое окно с вопросом, хочу ли я зарегистрировать новое место для входа.
  3. Независимо от действия, предпринятого на предыдущем шаге, в диалоговом окне отображается следующее сообщение об ошибке:

В процессе входа в систему могла произойти ошибка. Вы можете закрыть это окно и попытаться вернуться в приложение, хотя оно может попросить вас снова войти в систему. Вероятно, это связано с ошибкой в ​​приложении.

response FB.login содержит сообщение об ошибке. Проверяя состояние браузера, я вижу, что информация для входа хранится в файле cookie Facebook. Повторный запуск приведенного выше кода без очистки кеша теперь выполняется успешно.

Почему не получается с первого раза?


person Rok Strniša    schedule 10.11.2011    source источник


Ответы (1)


В связи с миграцией Facebook OAuth 2.0 и HTTPS OAuth 2.0 не используется после 1 октября. , 2011 в рамках JavaScript SDK не будет работать (правильно).

Чтобы приведенный выше пример работал, убедитесь, что:

  • ваш вызов FB.init устанавливает oauth в true (см. пример использования):
  • in the code that deals with the response:
    • you are reading the authResponse (not session) field of the FB.login's response;
    • вы вызываете FB.getAuthResponse (не FB.getSession) и читаете signedRequest из его response.
person Abby    schedule 11.11.2011