94

私のアプリケーションでは、jsapi を使用して Google サインアウトを実装しました。

URL https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=xxxxxxを使用して Google に接続し、次にhttps://www.googleapis.com/plus/v1/people/xxxxxxを使用してユーザー データを取得しましたグーグルプロフィールより。

アプリケーションからボタンをクリックしながら、Google からユーザーをサインアウトする必要があります。これを JavaScript で実装するにはどうすればよいですか。少なくとも、ユーザーがサインインするたびに Google ログイン ページに問い合わせる必要があります。

試してみapproval_prompt=forceましたが、うまくいかないようです。

4

12 に答える 12

272

OAuthの概要:ユーザーは彼/彼女が彼/彼女であると言っていますか?:

「LoginwithGoogle」オプションのように、OAuthを使用してStack Overflowにログインしたかどうかはわかりませんが、この機能を使用すると、StackOverflowはGoogleにあなたが誰であるかを知っているかどうかを尋ねるだけです。

「グーグルよ、このヴィネシュの仲間は、vinesh.e @ gmail.comが彼だと主張している、それは本当ですか?」

すでにログインしている場合、Googleは「はい」と表示します。そうでない場合、Googleは次のように言います。

「ちょっと待ってください。スタックオーバーフローです。このフェラーを認証します。彼が自分のGoogleアカウントに適切なパスワードを入力できる場合は、彼です。」

Googleのパスワードを入力すると、GoogleはStack Overflowにあなたが本人であると伝え、StackOverflowがログインします。

アプリからログアウトすると、アプリからログアウトします

ここで、OAuthを初めて使用する開発者が少し混乱することがあります...GoogleとStackOverflow、Assembla、Vineshの-very-cool-slick-webappはすべて異なるエンティティであり、GoogleはVineshのクールなWebアプリのアカウントについて何も知りません。逆に、プロファイル情報へのアクセスに使用しているAPIを介して公開されるものは別として。

ユーザーがログアウトするときは、Googleからログアウトしていないか、アプリ、Stack Overflow、Assembla、またはGoogleOAuthを使用してユーザーを認証したWebアプリケーションからログアウトしています。

実際、すべてのGoogleアカウントからログアウトしても、StackOverflowにログインできます。アプリがユーザーを認識したら、そのユーザーはGoogleからログアウトできます。Googleはもう必要ありません。

そうは言っても、あなたが求めているのは、実際にはあなたに属していないサービスからユーザーをログアウトさせることです。このように考えてみてください。ユーザーとして、Googleアカウントで5つの異なるサービスにログインし、そのうちの1つから初めてログアウトしたときに、Gmailアカウントにログインする必要があるとしたらどの程度イライラすると思いますか。そのアプリ開発者が、自分のアプリケーションからログアウトするときに、Googleからもログアウトする必要があると判断したためです。それは本当に早く古くなるでしょう。要するに、あなたは本当にこれをしたくありません...

ええ、何でも、私はまだユーザーをグーグルからログアウトさせたいのですが、どうすればいいですか?

そうは言っても、ユーザーをGoogleからログアウトさたい場合で、ワークフローが中断される可能性が非常に高いことに気付いた場合は、Googleサービスのログアウトボタンの1つからログアウトURLを動的に作成し、それを使用して呼び出すことができます。 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に対して認証されるため、ユーザーは使用する各Webアプリケーションにパスワードを何度も入力する必要がありません。慣れるまでには少し時間がかかりますが、ユーザーがGoogleにログインしている限り、アプリはユーザーが本人であるかどうかを心配する必要がないことを知っておいてください。

OAuthでGoogleプロフィール情報を使用して、プロジェクトで同じ実装を行っています。私はあなたが試しているのとまったく同じことを試みました、そしてそれは彼らが何度も何度もグーグルにログインしなければならないときに人々を本当に怒らせ始めたので、私たちは彼らをグーグルからログアウトするのをやめました。:)

于 2012-10-16T07:28:36.630 に答える
23

ログアウトしてサイトにリダイレクトできます。

var logout = function() {
    document.location.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://www.example.com";
}
于 2016-09-15T12:59:41.573 に答える
6

私にとっては、うまくいきます(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でこの関数を呼び出す必要があります

于 2014-04-23T13:32:16.743 に答える
2

これは、アプリケーションからユーザーをサインアウトするために機能しますが、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

于 2017-04-02T09:42:25.000 に答える