Как выйти из приложения, где я использовал OAuth2 для входа в систему с помощью Google?


в моем приложении я реализовал Google signout с помощью jsapi.

я использовал url https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=xxxxxx для подключения к Google, а затем https://www.googleapis.com/plus/v1/people/xxxxxx чтобы получить данные пользователя из профиля google.

теперь мне нужно выйти из пользователя из Google, нажав кнопку из моего приложения. Как я могу реализовать это в JavaScript, или, по крайней мере, он должен спросить Страницы входа в Google каждый раз, когда пользователь входит в систему.

Я пробовал approval_prompt=force, но, кажется, не работает.

8 72

8 ответов:

обзор OAuth: является ли Пользователь тем, кем он/она говорит, что он/она?:

Я не уверен, что вы использовали OAuth для входа в Stack Overflow, как опция "вход с Google", но когда вы используете эту функцию, Stack Overflow просто спрашивает Google, знает ли он, кто вы:

" Йо Google, этот Винеш парень утверждает, что vinesh.e@gmail.com это он, это правда?"

если вы уже вошли в систему, Google скажет да. Если нет, то Google скажут:

"повиси на переполнение стека, я проверить подлинность этого парня, и если он может ввести правильный пароль для своей учетной записи Google, то это он".

когда вы вводите свой пароль Google, Google затем сообщает Stack Overflow, что вы тот, за кого себя выдаете, и Stack Overflow регистрирует вас.

когда вы выходите из вашего приложения, вы выходите из код app:

вот где разработчики новые ОУТ иногда немного запутывается... Google и переполнения стека, Assembla, Vinesh-очень-крутая-красивая-веб-приложение, все разные лица, и Google ничего не знает о вашей учетной записи на Vinesh классный веб-приложение, и наоборот, кроме того, что это выставляется с помощью API вы используете, чтобы получить доступ к информации профиля.

когда ваш пользователь выходит из системы, он или она не выходит из Google, он / она выходит из вашего приложения или переполнения стека, или ассемблера, или любого другого веб-приложения, используемого Google OAuth для аутентификации пользователя.

на самом деле, я могу выйти из всех моих учетных записей Google и по-прежнему войти в Stack Overflow. Как только ваше приложение узнает, кто пользователь, этот человек может выйти из Google. Google больше не нужна.

С учетом сказанного, то, что вы просите сделать, это выйти из службы, которая действительно вам не принадлежит. Подумайте об этом так: как пользователь, как вы думаете, я был бы раздражен, если бы я вошел в 5 разных служб с моей учетной записью Google, то в первый раз, когда я вышел из одного из них, я должен снова войти в свою учетную запись Gmail, потому что разработчик приложения решил, что, когда я выхожу из своего приложения, я также должен выйти из Google? Это будет стареть очень быстро. Короче, ты действительно не хочу этого делать...

Да, да, что угодно, я все еще хочу выйти из Google, просто скажите мне, как это сделать?

С этим сказал, Если вы до сих пор хотите выйти из Google и понять, что вы вполне можете нарушить их рабочий процесс, вы можете динамически построить url-адрес выхода из одной из своих кнопок выхода из Google services, а затем вызвать его с помощью элемента img или тега сценария:

<script type="text/javascript" 
    src="https://mail.google.com/mail/u/0/?logout&hl=en" />

или

<img src="https://mail.google.com/mail/u/0/?logout&hl=en" />

или

window.location = "https://mail.google.com/mail/u/0/?logout&hl=en";

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

обратите внимание, что это не обязательно означает, что пользователь выйдет из код приложение, только Google. :)

резюме:

важно иметь в виду, что при выходе из вашего приложения вам не нужно заставлять пользователя повторно вводить пароль. В этом-то все и дело! Он аутентифицируется против Google, поэтому пользователю не нужно вводить свой пароль снова и снова и снова в каждой сети приложения он или она использует. Это требует некоторого привыкания, но знайте, что, пока пользователь вошел в Google, вашему приложению не нужно беспокоиться о том, является ли пользователь тем, кем он говорит.

у меня такая же реализация в проекте, как и у вас, используя информацию профиля Google с OAuth. Я попробовал то же самое, что вы хотите попробовать, и это действительно начало злить людей, когда им пришлось снова и снова входить в Google, поэтому мы перестали регистрироваться они из Гугла. :)

вы можете выйти из системы и перенаправить на свой сайт:

var logout = function() {
    document.location.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://www.example.com";
}

для меня это работает (java - android)

void RevokeAcess()
{
    try{
    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost("https://accounts.google.com/o/oauth2/revoke?token="+ACCESS_TOKEN);
    org.apache.http.HttpResponse response = client.execute(post);
    }
    catch(IOException e)
    {
    }
    CookieManager.getInstance().removeAllCookie(); // this is clear the cookies which tends to same user in android web view
}

вы должны вызвать эту функцию в AsyncTask в android

вы можете просто создать кнопку выхода и добавить эту ссылку на него, и он будет utimately выйти из приложения и перенаправит на нужный сайт:

https://appengine.google.com/_ah/logout?continue=http://www.YOURSITE.com

просто переключите свой сайт с вашего сайта

Я надеюсь, что мы сможем достичь этого, сохранив токен в сеансе при входе в систему и получить доступ к токену, когда он нажал на выход.

    String _accessToken=(String)session.getAttribute("ACCESS_TOKEN");
    if(_accessToken!=null)
    {
        StringBuffer path=httpRequest.getRequestURL();
        reDirectPage="https://www.google.com/accounts/Logout?
        continue=https://appengine.google.com/_ah/logout?
        continue="+path;
    }
    response.sendRedirect(reDirectPage);

это работает, чтобы подписать пользователя из приложения, но не Google.

var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function () {
  console.log('User signed out.');
});

Источник:https://developers.google.com/identity/sign-in/web/sign-in

Ouath просто делает экземпляр Google null, следовательно, это вы из Google. Вот как устроена архитектура. Выход из Google, если вы выходите из своего приложения-это грязная работа, но не может помочь, если требование предусматривает то же самое. Следовательно, необходимо добавить следующий код в файле signout() функция. Мой проект был угловой 6 приложение:

документ.местоположение.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://localhost:4200";

здесь localhost: 4200-это URL моего приложения. Если ваша страница входа в систему xyz.com затем введите это.

этот код будет работать для выхода

    <script>
      function signOut() 
      {
        var auth2 = gapi.auth2.getAuthInstance();
        auth2.signOut().then(function () {   
        console.log('User signed out.');   
        auth2.disconnect();   
      }); 
        auth2.disconnect();
      } 
    </script>