Omówienie protokołu OAuth: czy użytkownik jest tym, za kogo się podaje ?:
Nie jestem pewien, czy użyłeś OAuth do zalogowania się do Stack Overflow, na przykład opcji „Zaloguj się przez Google”, ale kiedy używasz tej funkcji, Stack Overflow po prostu pyta Google, czy wie, kim jesteś:
„Yo Google, ten gość z Vinesh twierdzi, że to on [email protected], czy to prawda?”
Jeśli jesteś już zalogowany, Google powie TAK. Jeśli nie, Google powie:
„Poczekaj sekundę Przepełnienie stosu, uwierzytelnię tego gościa i jeśli będzie mógł wprowadzić prawidłowe hasło do swojego konta Google, to będzie to on”.
Gdy wpiszesz swoje hasło Google, Google powie Stack Overflow, za kogo się podajesz, a Stack Overflow Cię zaloguje.
Po wylogowaniu z aplikacji, jesteś zalogowaniu z Twojej aplikacji:
Oto, gdzie programiści nowi w OAuth czasami są trochę zdezorientowani ... Google i Stack Overflow, Assembla, bardzo fajna-zgrabna-aplikacja internetowa Vinesha, to różne podmioty, a Google nic nie wie o Twoim koncie w fajnej aplikacji internetowej Vinesha i wice odwrotnie, poza tym, co jest ujawniane za pośrednictwem interfejsu API, którego używasz do uzyskiwania dostępu do informacji o profilu.
Kiedy użytkownik się wylogowuje, nie wylogowuje się z Google, wylogowuje się z Twojej aplikacji, Stack Overflow, Assembla lub jakiejkolwiek innej aplikacji internetowej używającej Google OAuth do uwierzytelnienia użytkownika.
W rzeczywistości mogę wylogować się ze wszystkich moich kont Google i nadal być zalogowanym do Stack Overflow. Gdy Twoja aplikacja będzie wiedzieć, kim jest użytkownik, ta osoba będzie mogła wylogować się z Google. Google nie jest już potrzebne.
Mając to na uwadze, prosisz o wylogowanie użytkownika z usługi, która tak naprawdę nie należy do Ciebie. Pomyśl o tym w ten sposób: jako użytkownik, jak myślisz, jak bardzo byłbym zirytowany, gdybym zalogował się do 5 różnych usług za pomocą mojego konta Google, a potem gdy pierwszy raz wylogowałem się z jednej z nich, muszę zalogować się na swoje konto Gmail znowu dlatego, że ten programista aplikacji zdecydował, że kiedy wyloguję się z jego aplikacji, powinienem również zostać wylogowany z Google? To szybko się zestarzeje. Krótko mówiąc, naprawdę nie chcesz tego robić ...
Tak, tak, nieważne, nadal chcę wylogować użytkownika z Google, po prostu powiedz mi, jak mam to zrobić?
Mając to na uwadze, jeśli nadal chcesz wylogować użytkownika z Google i zdasz sobie sprawę, że możesz bardzo dobrze zakłócać jego przepływ pracy, możesz dynamicznie utworzyć adres URL wylogowania z jednego z ich przycisku wylogowania z usług Google, a następnie wywołać go za pomocą element img lub tag skryptu:
<script type="text/javascript"
src="https://mail.google.com/mail/u/0/?logout&hl=en" />
LUB
<img src="https://mail.google.com/mail/u/0/?logout&hl=en" />
LUB
window.location = "https://mail.google.com/mail/u/0/?logout&hl=en";
Jeśli przekierujesz użytkownika na stronę wylogowania lub wywołasz go z elementu, który nie jest ograniczony między domenami, użytkownik zostanie wylogowany z Google.
Pamiętaj, że nie musi to oznaczać, że użytkownik zostanie wylogowany z Twojej aplikacji, tylko Google. :)
Podsumowanie:
Ważne jest, aby pamiętać, że po wylogowaniu się z aplikacji nie trzeba zmuszać użytkownika do ponownego wprowadzania hasła. O to chodzi! Uwierzytelnia się w Google, więc użytkownik nie musi w kółko wpisywać swojego hasła w każdej używanej przez siebie aplikacji internetowej. Przyzwyczajenie się do tego wymaga trochę czasu, ale pamiętaj, że dopóki użytkownik jest zalogowany w Google, Twoja aplikacja nie musi się martwić o to, czy użytkownik jest tym, za kogo się podaje.
Mam taką samą implementację w projekcie jak Ty, używając informacji z profilu Google z OAuth. Wypróbowałem to samo, co chcesz spróbować, i naprawdę zaczęło denerwować ludzi, gdy musieli ciągle logować się do Google, więc przestaliśmy wylogowywać ich z Google. :)
Możesz się wylogować i przekierować do swojej witryny:
var logout = function() { document.location.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://www.example.com"; }
źródło
U mnie działa (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 }
Musisz wywołać tę funkcję w AsyncTask w systemie Android
źródło
Możesz po prostu utworzyć przycisk wylogowania i dodać do niego ten link, a to ostatecznie wyloguje Cię z aplikacji i przekieruje do wybranej witryny:
https://appengine.google.com/_ah/logout?continue=http://www.YOURSITE.com
po prostu przełącz swoją WITRYNĘ na swoją witrynę
źródło
Działa to w celu wylogowania użytkownika z aplikacji, ale nie Google.
var auth2 = gapi.auth2.getAuthInstance(); auth2.signOut().then(function () { console.log('User signed out.'); });
Źródło: https://developers.google.com/identity/sign-in/web/sign-in
źródło
AuthInstance
czego użyłeś. Twoje źródło mówi ... „ Możesz umożliwić użytkownikom wylogowanie się z aplikacji bez wylogowywania się z Google ... ”Ouath sprawia, że instancja Google jest zerowa, a tym samym wyrzucasz ją z Google. Tak właśnie powstaje architektura. Wylogowanie się z Google, jeśli wylogujesz się z aplikacji, jest brudną robotą, ale nie możesz pomóc, jeśli wymóg stanowi to samo. Dlatego dodaj następujący kod do swojej funkcji signOut (). Moim projektem była aplikacja Angular 6:
document.location.href = " https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://localhost:4200 ";
Tutaj localhost: 4200 to adres URL mojej aplikacji. Jeśli Twoja strona logowania to xyz.com, wprowadź to.
źródło
ten kod będzie działał, aby się wylogować
<script> function signOut() { var auth2 = gapi.auth2.getAuthInstance(); auth2.signOut().then(function () { console.log('User signed out.'); auth2.disconnect(); }); auth2.disconnect(); } </script>
źródło
Aby wylogować się tylko z aplikacji, ale nie z Gmaila:
window.gapi.load('auth2', () => { window.gapi.auth2 .init({ client_id: '<Your client id configired on google console>' }) .then(() => { window.gapi.auth2 .getAuthInstance() .signOut() .then(function() { console.log('User signed out.'); }); }); });
Używam powyżej w moim kodzie ReactJs.
źródło
Mam nadzieję, że uda nam się to osiągnąć, przechowując token w sesji podczas logowania i uzyskując dostęp do tokena, gdy kliknął wylogowanie.
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);
źródło
Wygląda na to, że Google ostatnio zepsuło coś ze swoimi unieważnionymi danymi (zaczęło zwracać dla nas 400 błędów). Teraz musisz zadzwonić
auth2.disconnect ();
W naszym przypadku musimy poczekać kilka sekund na zakończenie połączenia rozłączającego, w przeciwnym razie kod logowania zostanie ponownie autoryzowany, zanim to się stanie. Byłoby dobrze, gdyby Google zwrócił obietnicę z metody rozłączenia.
źródło