Sto costruendo un sito Web + backend con lo FLask Framework in cui utilizzo Flask-OAuthlib per l'autenticazione con google. Dopo l'autenticazione, il back-end deve eseguire regolarmente la scansione dell'utente su Gmail. Così attualmente gli utenti possono autenticare la mia app e io memorizzo lo access_token
e lo refresh_token
. Il access_token
scade dopo un'ora, in modo che uno entro un'ora posso ottenere l'userinfo in questo modo:Come utilizzare un refresh_token per ottenere un nuovo access_token (usando 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
Una volta che l'ora è finita, ho bisogno di usare il refresh_token (che c'ho memorizzato nel mio database) richiedere un nuovo access_token
. Ho provato a sostituire the_stored_access_token
con the_stored_refresh_token
, ma questo mi dà semplicemente un errore Invalid Credentials
.
In this github issue ho letto il seguente:
a prescindere da come si è ottenuto il token di accesso/token di aggiornamento (sia per mezzo di un codice di autorizzazione di sovvenzione o una risorsa password del proprietario credenziali), si scambiano allo stesso modo, da passando il token di aggiornamento come refresh_token e grant_type su 'refresh_token'.
Da questo ho capito ho dovuto creare un'applicazione remota in questo modo:
google = oauthManager.remote_app(
'google',
# also the consumer_key, secret, request_token_params, etc..
grant_type='refresh_token',
refresh_token=u'1/xK_ZIeFn9quwvk4t5VRtE2oYe5yxkRDbP9BQ99NcJT0'
)
Ma questo porta ad una TypeError: __init__() got an unexpected keyword argument 'refresh_token'
. Quindi da qui sono un po 'perso.
Qualcuno sa come posso usare il refresh_token
per ottenere un nuovo access_token
? Tutti i suggerimenti sono ben accetti!