#facebook #session #facebook-javascript-sdk
#Facebook #сессия #facebook-javascript-sdk
Вопрос:
Мы разрабатываем веб-сайт по адресуwww.bodecanada.com . Один из методов входа, который мы предоставляем, — это facebook. Мы также пытаемся отслеживать, зарегистрирован ли пользователь в facebook или нет, когда обновляем страницу или открываем сайт в новой вкладке. Мы делаем это, вызывая FB.getLoginStatus() (из Facebook js sdk). Однако мы обнаруживаем, что в нескольких случаях — например, при открытии сайта на новой вкладке в Safari — статус ответа, который возвращается от FB.getLoginStatus, «неизвестен». В документации Facebook SDK говорится об этом о статусе «неизвестно»:
FB.getLoginStatus() позволяет вам определить, вошел ли пользователь в Facebook и прошел ли проверку подлинности вашего приложения. Для пользователя возможны три состояния:
- Пользователь вошел в Facebook и авторизовал ваше приложение. (подключен)
- Пользователь вошел в Facebook, но не авторизовал ваше приложение.(not_authorized)
- Пользователь либо не зарегистрирован в Facebook, либо явно вышел из вашего приложения, поэтому он не пытается подключиться к Facebook, и, следовательно, мы не знаем, аутентифицировали ли они ваше приложение или нет. (неизвестно)
В данном случае мы имеем дело с №3. Однако, когда я захожу на facebook, я обнаруживаю, что не вышел из системы. Но в то же время я не «явно вышел из системы» (что означает, что вызывается FB.logout ()) с моего сайта. Итак, почему он возвращает «неизвестно»?
Одно из решений, которое я нашел в Google, гласит, что нужно добавить cookies: true в FB.init (), чтобы включить сторонние cookies, поэтому я так и сделал:
FB.init({
appId : process.env.FB_APP_ID,
cookie : true,
xfbml : true,
version : 'v2.2'
});
Но это ничего не меняет.
Итак, почему FB.getLoginStatus() возвращает статус ответа «неизвестно», когда я открываю сайт на новой вкладке?
Спасибо.
Ответ №1:
У меня была та же проблема, когда я закрывал и снова открывал браузер. Что я сделал, так это поместил fb.login
функцию, если статус неизвестен. Но в браузере должны быть включены окна emergent windows:
function statusChangeCallback(response) {
if (response.status === 'connected') {
userId = response.authResponse.userID;
accessToken = response.authResponse.accessToken;
var userinfo = getUserInfo(userId);
} else if (response.status === 'unknown') {
FB.login(function(response) {
statusChangeCallback(response)
}, {scope: 'public_profile,email'});
}
}
Ответ №2:
Я получаю ту же проблему, также используя «cookie: true». Но .. если я помещу вызов FB.login в блок «статус === ‘неизвестно'», я получу заблокированное всплывающее окно FB oauth — это пустое окно. Я знаю, что я вошел в Facebook (это на следующей вкладке), я просто не понимаю, почему FB.LoginStatus всегда возвращает «неизвестно».