Как выйти из приложения, где я использовал 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 ответов


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

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

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

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

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

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

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

вот где разработчики новые для Оаут иногда немного запутывается... Google и Stack Overflow, Assembla, Vinesh's-very-cool-slick-webapp-это разные сущности, и Google ничего не знает о вашей учетной записи в прохладном веб-приложении Vinesh и наоборот, кроме того, что доступно через API, который вы используете для доступа к информации профиля.

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

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

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

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

С этим сказано, Если вы до сих пор хотите выйти из Google и понять, что вы можете очень хорошо нарушать их рабочий процесс, вы можете динамически создавать url-адрес выхода из одного из своих сервисов Google, а затем вызывать его с помощью элемента 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, поэтому мы прекратили регистрацию их из Google. :)


вы можете выйти и rediret на свой сайт:

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 нулевым, следовательно, вы из 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>