Gapi.auth.signOut(); не работает Я потерян
Ниже приведен код, который я использую для входа в Google. У меня есть элемент login.php с идентификатором авторизации. При щелчке он записывается в порядке.
У меня есть ссылка на выход в моем заголовочном файле. Когда я нажимаю logout, он вызывает gapi.auth.signOut();
, тогда он разрушает сеанс и перенаправляет обратно в login.php
Это происходит, насколько я могу судить, но затем он просто регистрирует пользователя прямо на нашем сайте с помощью google. Это боль, поскольку некоторые из наших пользователей переключаются с google на facebook logins.
Заранее благодарим за помощь.
function handleClientLoad() {
gapi.client.setApiKey(apiKey);
window.setTimeout(checkAuth, 1);
}
function checkAuth() {
gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: true}, handleAuthResult);
}
function handleAuthResult(authResult) {
var authorizeButton = document.getElementById('authorize-button');
if (authResult && !authResult.error) {
//authorizeButton.style.visibility = 'hidden';
makeApiCall();
} else {
//authorizeButton.style.visibility = '';
authorizeButton.onclick = handleAuthClick;
}
}
function handleAuthClick(event) {
gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: false}, handleAuthResult);
return false;
}
function signOut() {
gapi.auth.signOut();
}
function makeApiCall() {
gapi.client.load('oauth2', 'v2', function() {
var request = gapi.client.oauth2.userinfo.get();
request.execute(function(logResponse) {
var myJSON = {
"myFirstName": logResponse.given_name,
"myLastName": logResponse.family_name,
"name": logResponse.name,
"socialEmailAddress": logResponse.email
};
gapi.client.load('plus', 'v1', function() {
var request = gapi.client.plus.people.get({
'userId': 'me'
});
request.execute(function(logResponse2) {
//alert(JSON.stringify(logResponse));
myJSON['profilePicture'] = logResponse2.image.url;
myJSON['socialId'] = logResponse2.id;
//alert(JSON.stringify(myJSON));
$.ajax({
type: "POST",
url: "includes/login-ajax.php",
data: "function=googleLogin&data=" + JSON.stringify(myJSON),
dataType: "html",
success: function(msg) {
if (msg == 1) {
//window.location = "settings.php";
}
}
});
});
});
});
});
}
Ответы
Ответ 1
Убедитесь, что вы установили политику cookie на значение, отличное от none
, в коде кнопки входа. Например:
function handleAuthClick(event) {
gapi.auth.authorize(
{
client_id: clientId,
scope: scopes,
immediate: false,
cookie_policy: 'single_host_origin'
},
handleAuthResult);
return false;
}
Обратите внимание, что выйти не будет, если вы работаете с localhost.
Ответ 2
Странная проблема, но решила мою проблему, предоставив кнопку signin (скрытую), даже если пользователь аутентифицирован.
См. полный вопрос/ответ здесь fooobar.com/questions/412049/...
Ответ 3
Сегодня я столкнулся с той же проблемой. Я ищу решение для всего. Единственное надежное решение, которое сработало для меня, - это отменить, как описано здесь
Я хранил access_token в сеансе, который необходим во время отзыва
Ниже мой код вы можете найти полезным
function logout() {
var access_token = $('#<%=accessTok.ClientID %>').val();
var provider = $('#<%=provider.ClientID %>').val();
if (access_token && provider) {
if (provider == 'GPLUS') {
var revokeUrl = 'https://accounts.google.com/o/oauth2/revoke?token=' +
access_token;
// Perform an asynchronous GET request.
$.ajax({
type: 'GET',
url: revokeUrl,
async: false,
contentType: "application/json",
dataType: 'jsonp',
success: function (nullResponse) {
// Do something now that user is disconnected
// The response is always undefined.
},
error: function (e) {
// Handle the error
// console.log(e);
// You could point users to manually disconnect if unsuccessful
// https://plus.google.com/apps
}
});
}
else if (provider == 'FB') {
FB.getLoginStatus(function (response) {
if (response.status === 'connected') {
FB.logout();
}
});
}
} else {
}
}