21

JavaScript用のGoogleAPIクライアントライブラリ(ベータ版)を使用して、Webアプリケーション(YouTube操作用)でユーザーのGoogleアカウントを承認しています。すべて正常に動作しますが、アプリケーションからユーザーを「ログアウト」する方法、つまりアクセストークンをリセットする方法がわかりません。

たとえば、次のコードはユーザー認証をチェックし、そうでない場合は、ユーザーがアカウントにログインしてWebアプリケーションによるユーザーデータへのアクセスを許可するためのポップアップウィンドウを表示します。

gapi.auth.authorize({client_id: CLIENT_ID, scope: SCOPES, immediate: false}, handleAuth);

ただし、クライアントライブラリには認証をリセットするメソッドがありません。

ユーザーを「accounts.google.com/logout」にリダイレクトする回避策がありますが、このアプローチは私が必要とするものではありません。したがって、アプリケーションだけでなく、どこからでもユーザーをGoogleアカウントからログオフします。

Googleのよくある質問とクライアントライブラリの説明も役に立ちません。

4

5 に答える 5

15

アクセストークンを取り消してみてください。これにより、実際の許可が取り消され、自動承認が機能しなくなります。これで問題は解決すると思います。

https://developers.google.com/accounts/docs/OAuth2WebServer#tokenrevoke

于 2013-03-27T00:34:00.143 に答える
8

その非常に簡単です。アクセスを取り消すだけです。

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)
    {
    }
}

しかし、それはasyncTaskにあるはずです

于 2014-04-23T13:29:14.850 に答える
5

認証をリセットすることの意味によって異なります。これを行うには、次の3つの方法が考えられます。

  1. サーバーで認証を削除
    するmyaccount.google.com/permissionsにアクセスし、アプリを見つけて削除します。次にサインインしようとするときは、アカウント選択と同意画面を使用して完全な承認フローを完了する必要があります。

  2. クライアントでサインアウト
    gapi.auth2.getAuthInstance()。signOut();
    このようにして、Google認証サーバーは引き続きアプリを記憶し、認証トークンはブラウザのストレージに残ります。

  3. サインアウトして
    gapi.auth2.getAuthInstance()。signOut();を切断します。
    gapi.auth2.getAuthInstance()。disconnect();
    これは(1)と同等ですが、クライアント上にあります。

于 2018-01-24T14:10:22.730 に答える
0

単に使用してください:gapi.auth.setToken(null);

于 2013-11-03T15:59:30.853 に答える
0

dotnetのソリューション、以下のAPIを呼び出し、アクセストークンを渡します。doc- https://developers.google.com/identity/protocols/oauth2/web-server#tokenrevoke

        string url = "https://accounts.google.com/o/oauth2/revoke?token=" + profileToken.ProfileAccessToken;
        RestClient client = new RestClient(url);

        var req = new RestRequest(Method.POST);
        IRestResponse resp = client.Execute(req);
于 2021-03-10T14:21:53.070 に答える