У меня возникли некоторые проблемы при разработке механизма входа / выхода пользователя на моем веб-сайте, который работает с Facebook.
Поведение некоторых событий Facebook кажется нелогичным:
'auth.login 'срабатывает при каждой загрузке страницы, когда пользователь вошел в систему.
FB.getLoginStatus () срабатывает при каждой загрузке страницы, как и следовало ожидать
' auth.logout 'толькокогда пользователь фактически выходит из системы, и в отличие от «auth.login», auth.logout не срабатывает при каждой загрузке страницы, когда пользователь не вошел в систему.
Я хочу создать систему, которая обнаружит, будет или нетСессия пользователей считает, что пользователь вошел в Facebook.Если сеанс пользователя настроен на то, что он вошел в Facebook, но на самом деле это не так, тогда выполните ajax-вызов на сервер и обновите сеанс.Если сессия и facebook js sdk договорились о том, вошел ли пользователь в систему или нет, ничего не делайте.И если сеанс пользователя не знает, что пользователь вошел в Facebook, но js sdk говорит, что это так, обновите сервер с помощью вызова ajax.
Я хочу создать приложение, которое синхронизируется с текущим статусом входа пользователя Facebook в систему.,И я хотел бы, чтобы это приложение входило / выходило из системы (выполняя ajax-вызов на мой сервер для обновления своего сеанса) всякий раз, когда они изменяют статус Facebook.Это сложно, так как я не могу точно определить, когда пользователь входит в систему или выходит из нее.
Одна из конкретных проблем, с которыми я сталкиваюсь, - это когда пользователь загружает страницу, и он входит в Facebook, ОБА авторизацияСобытие .login и события FB.getLoginStatus () запускаются.
Мой окончательный вопрос: какую комбинацию событий facebook или общей стратегии я должен использовать для создания такого приложения.Хороший пример того, чего я добиваюсь, - это внедрение hulu.com входа в Facebook на их веб-сайте.Спасибо за чтение этого!
<script>
window.fbAsyncInit = function() {
FB.init({appId: '<?=$facebook_app_id?>',
status: true,
cookie: false,
xfbml: true});
FB.getLoginStatus(function(response) {
console.log('getLoginStatus');
console.log(response);
if(response.session){
if(window.module.Globals.prototype.oauth_uid != response.session.uid){
//authenticated user unknown to server, update server and set session
window.module.VCAuth.prototype.session_login();
}
}else{
if(window.module.Globals.prototype.oauth_uid){
//unauthenticated user with authenticated session, update server and unset session
window.module.VCAuth.prototype.session_logout();
}
}
});
FB.Event.subscribe('auth.login', function(response){
console.log('auth.login');
console.log(response);
});
FB.Event.subscribe('auth.logout', function(response){
console.log('auth.logout');
console.log('response');
});
};
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol +
'//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
</script>