Ich baue eine Website + Backend mit der FLask Framework in der ich Flask-OAuthlib verwenden, um mit Google zu authentifizieren. Nach der Authentifizierung muss das Backend den Benutzer regelmäßig auf sein Google Mail prüfen. So können Benutzer derzeit meine App authentifizieren und ich speichere die access_token
und die refresh_token
. Die access_token
läuft nach einer Stunde so innerhalb dieser einer Stunde ich die Userinfo wie so bekommen kann:Wie verwende ich ein refresh_token, um ein neues access_token zu erhalten (mit Flask-OAuthLib)?
google = oauthManager.remote_app(
'google',
consumer_key='xxxxxxxxx.apps.googleusercontent.com',
consumer_secret='xxxxxxxxx',
request_token_params={
'scope': ['https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/gmail.readonly'],
'access_type': 'offline'
},
base_url='https://www.googleapis.com/oauth2/v1/',
request_token_url=None,
access_token_method='POST',
access_token_url='https://accounts.google.com/o/oauth2/token',
authorize_url='https://accounts.google.com/o/oauth2/auth'
)
token = (the_stored_access_token, '')
userinfoObj = google.get('userinfo', token=token).data
userinfoObj['id'] # Prints out my google id
Sobald die Stunde vorbei ist, ich brauche die refresh_token zu verwenden (was ich in meiner Datenbank gespeichert habe) um eine neue access_token
anzufordern. Ich habe versucht, the_stored_access_token
durch the_stored_refresh_token
zu ersetzen, aber das gibt mir einfach einen Invalid Credentials
-Fehler.
In this github issue las ich folgendes:
unabhängig davon, wie Sie das Zugriffstoken/Aktualisierungs-Token erhalten (ob durch einen Autorisierungscode Erteilung oder Ressourceneigentümer Kennwortdaten), können Sie sie auf die gleiche Weise austauschen, durch Übergabe des Refresh-Tokens als refresh_token und grant_type als 'refresh_token'.
Daraus ich verstand ich, wie so eine Remote-App erstellen hatte:
google = oauthManager.remote_app(
'google',
# also the consumer_key, secret, request_token_params, etc..
grant_type='refresh_token',
refresh_token=u'1/xK_ZIeFn9quwvk4t5VRtE2oYe5yxkRDbP9BQ99NcJT0'
)
Aber dies führt zu einer TypeError: __init__() got an unexpected keyword argument 'refresh_token'
. Von hier bin ich irgendwie verloren.
Weiß jemand, wie ich die refresh_token
verwenden kann, um eine neue access_token
zu bekommen? Alle Tipps sind willkommen!