2015-04-20 2 views
5

Ich arbeite über Google+ mit Authentifizierung nach dem folgenden: https://developers.google.com/+/mobile/android/sign-inRegeneration von „one time Autorisierungscode“ für Google+ auf Android

Die meisten dieser Verfahren scheint in Ordnung. Das Problem, das ich habe, ist, dass wir einen "einmaligen Autorisierungscode" bekommen müssen, damit unsere Backend-Server bestimmte Anfragen im Auftrag des Benutzers mit ihrer Erlaubnis ausführen können. Dies wird im Abschnitt "Server-seitigen API-Zugriff für Ihre App aktivieren" behandelt. Aus verschiedenen Gründen können unsere Server jedoch dazu führen, dass die Anmeldung fehlschlägt, auch wenn der Autorisierungscode gültig ist (z. B. hat der Benutzer noch kein Konto, das dem Google+ Konto auf unseren Servern entspricht) kann man machen).

In diesem Fall müssen wir sie möglicherweise später erneut anmelden. Was ich finde, ist, dass, wenn ich die zweite Anmeldung mit Google +, es gibt mir die gleichen Autorisierungscode, auch wenn es bereits von unseren Servern verwendet wurde. Ich habe versucht, die Verbindung zum Google Client API zu trennen und wieder herzustellen und GoogleApiClient.clearDefaultAccountAndReconnect() zu rufen, aber egal, was ich tue, scheine ich am Ende mit dem gleichen Autorisierungscode zu enden. Dies wird vom Server natürlich abgelehnt, wenn er versucht wird, ihn zu benutzen, da er bereits benutzt wurde.

Ich frage mich, was ich hier falsch mache. Ich habe die folgende Methode, die während der ersten Authentifizierung aufgerufen wird, und dann erneut, wenn ein Antwortstatus von 500 von unserem Server erkannt wird (zeigt an, dass der vorherige Aufruf fehlgeschlagen ist, vermutlich, weil der Code bereits verwendet wurde):

Antwort

2

Also, die Antwort war viel einfacher als ich mir vorgestellt habe. Offensichtlich gibt es eine clearToken() Methode auf der GoogleAuthUtil Klasse:

http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html#clearToken%28android.content.Context,%20java.lang.String%29

public static void Cleartoken (Context Kontext, String-Token)

Löschen die angegebenen Token in lokalen Cache mit Bezug auf der Kontext. Beachten Sie, dass der Kontext dem entsprechen muss, der zum Initialisieren des Tokens in einem vorherigen Aufruf von getToken (Context, String, String) oder getToken (Context, String, String, Bundle) verwendet wurde.

Parameter

context Kontext des Tokens.
token Das zu löschende Token.

Wirft

GooglePlayServicesAvailabilityException
GoogleAuthException
IOException

Aufruf diese Methode, bevor Sie zum erneuten Authentifizierung verursacht Google ein neues einmaliges Autorisierungs-Token zu erzeugen.

+0

Das ist, was ich mache, aber ich bekomme immer noch den gleichen Autorisierungscode für 10 Minuten. Hat dies für Sie sofort einen neuen Autorisierungscode zurückgegeben? – Jonathan

+0

@ Jonathan Also, was ich tue, ist eine 'GooglePlusAuthUtil' Klasse, in der ich das Autorisierungstoken als eine Mitgliedsvariable ablege. Wenn das Autorisierungstoken nicht null ist (das heißt, ich habe schon gesehen, dass ein Token über den Draht kommt), rufe ich 'clearToken()' auf, und rufe dann 'getToken()' erneut auf und speichere das Ergebnis im Member Variable. Das regeneriert das Token für mich, ja. – jwir3

+0

@ Jonathan Sorry, ich habe vergessen, einen entscheidenden Teil zu erwähnen - Sie müssen das Token mit dem Methodenaufruf 'clearToken()' senden. Ist es möglich, dass Sie versuchen, 'getToken()' aufzurufen, bevor die Methode 'clearToken()' abgeschlossen ist (d. H. Auf asynchrone Weise)? – jwir3

Verwandte Themen