Facebook JS SDK FB.logout() не завершает сеанс пользователя
Я пытаюсь вывести пользователя из Facebook с помощью Facebook JS SDK, но призывая:
FB.logout(function(response){
console.log(response);
});
возвращает:
response.status == "connected"
И только после обновления страницы SDK понимает, что сеанс закончился. Кто-нибудь знает, что может вызвать такое поведение? Этот код ранее работал в моем приложении и недавно начал вести себя таким образом.
Другой пример использования FireBug:
![enter image description here]()
Ответы
Ответ 1
https://developers.facebook.com/bugs/245362365535898?browse=search_4f112135664703a96454690
Это ошибка в SDK JS, который теперь исправлен, и его нужно задвинуть не слишком долго.
До тех пор вы можете сделать следующее
FB.logout(function(response) {
FB.Auth.setAuthResponse(null, 'unknown');
...
});
Ответ 2
См. http://hustoknow.blogspot.com/2012/01/dealing-with-zombie-facebook-cookies.html
Когда вы выходите из системы, запрос на междоменный запрос отправляется в Facebook, чтобы аннулировать сеанс. Когда вы нажмете reload, другой запрос будет отправлен на сайт Facebook - поскольку FB распознает cookie как недействительный, он корректно удаляет файл cookie из вашего браузера.
Я подозреваю, что это ошибка регулярного выражения в том, как они забыли проанализировать файл cookie fbm_, недавно введенный в последний день или около того. Я просто удивлен, что это исправление не было нажато.
Ответ 3
FB.logout(function(response) {
...
});
Этот метод FB.logout работает на 100%.
Проблема в том, что пользователи пытаются вызвать его из localhost, который не работает.
Попробуйте позвонить ему с сервера.
Ответ 4
У меня такой же опыт работы с FB.Logout()
, который не работает как рекламируемый. В качестве обходного пути я использую нижеследующую функцию javascript, чтобы проверить, зарегистрирован ли пользователь, и если да, переадресуйте на https://www.facebook.com/logout.php с URL-адресом последующая страница для загрузки и токен доступа:
function reallylogout() {
FB.getLoginStatus(function (response) {
if (response.authResponse) {
window.location = "https://www.facebook.com/logout.php?next=" +
'URL to redirect to' +
"&access_token=" + response.authResponse.accessToken;
} else {
$("#loginButtonDiv").show();
$("#logoutButtonDiv").hide();
}
});
}
Бит show/hide - это просто jQuery, чтобы показать или скрыть divs, в которых есть кнопка входа и выхода из системы. Кнопка logout onclick запускает функцию realLogout().
Это работает для моего приложения.
Ответ 5
Я столкнулся с подобной проблемой. Я использовал FB.getLoginStatus()
после выхода из системы.
Ответ 6
Он выглядит сломанным в Facebook. На FB rell вы можете войти, но функция выхода из системы ничего не делает. http://www.fbrell.com/auth/all-in-one
Ответ 7
Хорошо, ребята, я нашел решение для этого:
Добавьте событие onClick для тега logout <a>
, как это показано
onclick="FB.logout(function() { document.location.reload(); });"
Все вместе:
<a href="#"
id="auth-logoutlink"
style="float:left;font-size: small;"
onclick="FB.logout(function() { document.location.reload(); });">
[logout]
</a>
Ответ 8
в приложении asp.net mvc я сделал это как следующее.
<a href="javascript:void(0);" class="logOff">Log out</a>
$(function () {
$(".logOff").click(function () {
//check if logout is
FB.getLoginStatus(function (response) {
console.log('inside login status');
if (response.status === 'connected') {
// the user is logged in and has authenticated your
// app, and response.authResponse supplies
// the user ID, a valid access token, a signed
// request, and the time the access token
// and signed request each expire
var uid = response.authResponse.userID;
var accessToken = response.authResponse.accessToken;
FB.logout(function (response) {
FB.Auth.setAuthResponse(null, 'unknown');
});
} else if (response.status === 'not_authorized') {
// the user is logged in to Facebook,
// but has not authenticated your app
} else {
// the user isn't logged in to Facebook.
console.log('response status not logged in');
}
});
window.location.href = '@Url.Action("LogOff", "Account")';
});
Ответ 9
Возможно, это не сработает, потому что вы не включаете в себя свой Facebook-приложение. Это работает для меня вот так:
Ext.get('auth-logoutlink').on('click', function(){
FB.getLoginStatus(function (response) {
if (response.authResponse) {
window.location = "https://www.facebook.com/logout.php?confirm=1&api_key=**MYAPIKEY**&next=" +
'**MYWEBSITEURL**' +
"&access_token=" + response.authResponse.accessToken;
} else {
//HIDE **LOGOUT BUTTON**
//SHOW **LOGIN BUTTON**
}
});
});