Sie müssen sich keine Gedanken über das Aktualisieren von Tokens machen, bis Sie den Parameter Expiry
gespeichert haben. Nachdem sie Objekt der 'Token', speichern Sie die folgenden in Ihrer Datenbank:
token.AccessToken
, token.RefreshToken
, token.TokenType
und token.Expiry
beim Abrufen, konstruieren die Token-Objekt wieder die oben genannten Parameter:
token := new(oauth2.Token)
token.AccessToken = {{ From DataBase }}
token.RefreshToken = {{ From DataBase }}
token.Expiry = {{ From DataBase }}
token.TokenType = {{ From DataBase }}
und dann erhalten Sie Ihren HTTP-Client:
config.Client(ctx, token)
Dies wird die Aktualisierung des Tokens behandeln. Auszug (weitere Informationen: Golang oauth2 client):
Der Client gibt einen HTTP-Client mit dem bereitgestellten Token zurück. Das Token wird bei Bedarf automatisch aktualisiert.
Der einzige Nachteil ist, dass das aktualisierte Zugriffstoken nicht zurückgegeben wird. Aber es funktioniert! Google hat keine Beschränkungen dafür, wie oft das Aktualisierungstoken verwendet wird.
Von diesem Gist (https://gist.github.com/jfcote87/89eca3032cd5f9705ba3#file-gistfile1-go-L26-L30) scheint es, dass, ja, Sie sollten das Token aus Ihrer Datenbank abrufen und es als '* oauth2.Token'. Die Definition der Token-Struktur finden Sie hier: https://github.com/golang/oauth2/blob/master/token.go#L25-L49. Links und weitere Diskussion hier: https://github.com/golang/oauth2/issues/84 – Intermernet
Auch das kann von Interesse sein "Client gibt einen HTTP-Client mit dem bereitgestellten Token zurück. Das Token wird bei Bedarf automatisch aktualisiert. " von https://godoc.org/golang.org/x/oauth2#Config.Client – Intermernet
Danke @Intermernet! Ich werde es heute Abend testen, aber im Moment sehe ich die Lösung für mein Problem. Während mein Code relativ ähnlich aussieht, habe ich nicht nach der Gültigkeit des Tokens gesucht, daher war der erste Aufruf nach Ablauf immer fehlgeschlagen. – Andrew