私のアプリケーションでは、jsapiを使用してGoogleサインアウトを実装しました。
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
を試しましたが、機能していないようです。
「Googleでログイン」オプションのようにOAuthを使用してStack Overflowにログインしたかどうかはわかりませんが、この機能を使用すると、Stack Overflowは単にGoogleに自分が誰かを知っているかどうかを尋ねます:
「Googleよ、このVineshのファラは[email protected]が彼だと主張していますが、本当ですか?」
既にログインしている場合、GoogleはYESと表示します。そうでない場合、Googleは次のように言います。
「ちょっとスタックオーバーフローを待ってください。このエラーを認証します。彼が自分のGoogleアカウントに正しいパスワードを入力できれば、それが彼です」。
Googleのパスワードを入力すると、GoogleはStack Overflowに自分が誰であるかを伝え、Stack Overflowがログインします。
ここでは、OAuthを初めて使用する開発者が少し混乱する場合があります。プロファイル情報にアクセスするために使用しているAPIを介して公開されているものは別として、VineshのクールなWebアプリ、およびその逆。
ユーザーがログアウトするとき、ユーザーはGoogleからログアウトしておらず、アプリ、Stack Overflow、Assembla、またはGoogleを使用しているWebアプリケーションからログアウトしていますOAuthユーザーを認証します。
実際、すべてのGoogleアカウントからログアウトしても、Stack Overflowにログインできます。ユーザーが誰であるかがアプリでわかると、そのユーザーはGoogleからログアウトできます。 Googleはもう必要ありません。
そうは言っても、あなたがやろうとしているのは、本当にあなたに属していないサービスからユーザーをログアウトさせることです。このように考えてみてください。ユーザーとして、Googleアカウントで5つの異なるサービスにログインした場合、私はどの程度イライラすると思いますか。そして、そのうちの1つから初めてログアウトしたとき、Gmailアカウントにログインする必要があります繰り返しますが、そのアプリ開発者は、自分のアプリケーションからログアウトするときに、Googleからもログアウトする必要があると判断したのですか?それは本当に早く老化するでしょう。要するに、あなたは本当にこれをしたくない...
そうは言っても、もしあなたがまだdoユーザーをGoogleからログアウトさせ、あなたが彼らのワークフローを非常に混乱させているかもしれないことに気づいたら、動的にGoogleサービスのログアウトボタンの1つからログアウトURLを作成し、img要素またはスクリプトタグを使用してそれを呼び出します。
<script type="text/javascript"
src="https://mail.google.com/mail/u/0/?logout&hl=en" />
OR
<img src="https://mail.google.com/mail/u/0/?logout&hl=en" />
OR
window.location = "https://mail.google.com/mail/u/0/?logout&hl=en";
ユーザーをログアウトページにリダイレクトするか、クロスドメイン制限されていない要素からユーザーを呼び出すと、ユーザーはGoogleからログアウトされます。
これは、必ずしもユーザーがyourアプリケーションからログアウトされることを意味するものではなく、Googleのみです。 :)
あなたが覚えておくべき重要なことは、アプリからログアウトするときに、ユーザーにパスワードを再入力させる必要がないということです。それが全体のポイントです! Googleに対して認証されるため、ユーザーは使用する各Webアプリケーションで何度も何度もパスワードを入力する必要がありません。慣れるまでには多少時間がかかりますが、ユーザーがGoogleにログインしている限り、アプリはユーザーが本人であるかどうかを心配する必要はありません。
OAuthでGoogleプロフィール情報を使用して、プロジェクトで同じ実装を行っています。私があなたが試みようとしているのと同じことを試みましたが、人々が何度もGoogleにログインしなければならないときに人々を怒らせ始めたので、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
}
AndroidのAsyncTaskでこの関数を呼び出す必要があります
このコードはサインアウトするように機能します
<script>
function signOut()
{
var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function () {
console.log('User signed out.');
auth2.disconnect();
});
auth2.disconnect();
}
</script>
ログアウトボタンを作成してこのリンクを追加すると、アプリからログアウトされ、目的のサイトにリダイレクトされます。
https://appengine.google.com/_ah/logout?continue=http://www.YOURSITE.com
あなたのウェブサイトであなたのサイトを切り替えるだけです
OuathはGoogleインスタンスをnullにするだけなので、Googleから除外されます。これがアーキテクチャの作成方法です。アプリからログアウトする場合、Googleからログアウトするのは面倒ですが、要件が同じことを規定している場合は役に立ちません。したがって、signOut()関数に次を追加します。私のプロジェクトはAngular 6アプリでした:
document.location.href = " https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://localhost:420 ";
ここで、localhost:4200は私のアプリのURLです。ログインページがxyz.comの場合、それを入力します。
これは、アプリケーションからユーザーをサインアウトするために機能しますが、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
ログイン中にセッションにトークンを保存し、ログアウトをクリックしたときにトークンにアクセスすることでこれを達成できることを願っています。
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);