Почему FB.login не удаляет файл cookie выхода?

У меня проблема с логикой аутентификации Facebook:

  1. При загрузке домашней страницы я вызываю getLoginStatus(), и если я получаю "connected", я перенаправляю пользователя на страницу его учетной записи. Если нет, пользователь может нажать кнопку входа в систему, которая вызывает FB.login().
  2. Если пользователь вошел в систему, а затем возвращается на домашнюю страницу (полная загрузка страницы), getLoginStatus() возвращает "connected", как и ожидалось, и пользователь возвращается на страницу учетной записи.
  3. Однако, когда вошедший в систему пользователь вызывает FB.logout() и повторяет шаги 1-2, 2-й шаг всегда будет давать статус входа "unknown". Итак, FB.logout() в основном ломает мою логику подпрыгивания.

Я проверил механику вызовов входа/выхода из системы, и оказалось, что FB.logout() создает файл cookie fblo_<appId> со сроком действия 1 год, который не позволяет getLoginStatus() возвращать надлежащий статус. Кажется, это реальный механизм для удержания людей вне системы, который я могу понять. Однако я не могу понять: почему этот файл cookie не удаляется при успешном вызове FB.login()?


comment
Вы проверили, для каких путей установлены эти файлы cookie?   -  person CBroe    schedule 23.06.2017
comment
Существует только один файл cookie для выхода fblo_<appId>, который установлен для всего моего домена с путем /. Так что это довольно липко, учитывая, что его не очищали в течение года.   -  person krukid    schedule 26.06.2017
comment
есть ли ошибка / обсуждение для этого?   -  person Simon_Weaver    schedule 07.12.2017


Ответы (2)


Я исправил это сам, программно удалив cookie fblo_<appid> в функциях обратного вызова как FB.login(), так и FB.logout().

person Nagesh Andani    schedule 31.08.2017
comment
Вы точно НЕ хотите делать это в logout(). Попробуйте следующее: войдите на facebook.com как обычный пользователь и аутентифицируйте свое приложение на своем веб-сайте. Затем в браузере, который вы никогда раньше не использовали, войдите на facebook.com и откройте свое приложение. Вы автоматически войдете в систему, потому что вы уже подключились. В этот момент выйдите из системы, и файл cookie будет установлен только в этом браузере. Если бы вы удалили его, вы бы снова автоматически вошли в систему. - person Simon_Weaver; 07.12.2017

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

В любом случае убедитесь, что вы учитываете эти разные сценарии при тестировании:

Человек входит в Facebook, а затем входит в ваше приложение. После выхода из вашего приложения человек все еще находится в Facebook.

Человек входит в ваше приложение и в Facebook как часть процесса входа в ваше приложение. При выходе из вашего приложения пользователь также выходит из Facebook.

Человек входит в другое приложение и в Facebook как часть процесса входа в другое приложение, а затем входит в ваше приложение. При выходе из любого приложения пользователь выходит из Facebook.

https://developers.facebook.com/docs/reference/javascript/FB.logout/


Совет по отладке:

На вкладке «Приложение» в Chrome вы можете выбрать «Файлы cookie» на левой панели, а затем ввести fblo в поле поиска, чтобы выполнить фильтрацию по этому имени. Когда я вызываю FB.login и успешно аутентифицируюсь, я вижу, что файл cookie fblo исчезает, поэтому я считаю, что эта проблема исправлена.

введите здесь описание изображения

person Simon_Weaver    schedule 07.12.2017
comment
И используйте функцию «тестовый пользователь», чтобы создать тестовые учетные записи для тестирования: https://developers.facebook.com/apps/{YOUR-APP-ID}/roles/test-users/ - person Simon_Weaver; 09.12.2017