J'essaie d'obtenir l'application de l'échantillon par défaut de travail afin d'utiliser les API (le même que cet exemple):Django nonrel ne peut pas récupérer sauvé des titres de compétences via un stockage
https://code.google.com/p/google-api-python-client/source/browse/samples/django_sample/plus/views.py
je récupère avec succès le jeton d'accès , mais mon gestionnaire d'affichage d'index ne peut pas récupérer les informations d'identification enregistrées dans le rappel. Cela signifie que mon avis est dans une boucle de redirection sans fin demander à l'API d'accès il a déjà tout le temps:
INFO:root:"GET/HTTP/1.1" 302 -
INFO:oauth2client.client:Successfully retrieved access token
INFO:root:"GET /oauth2callback/?state=1Rwu-LG-cowGmf9UrW6EuzoxNDA5MTY3M&code=4/yaQK1MVKYh9PeSN7OilnYHzdfSf_.An4_j5za2IcboiIBeO6P2m9ej9cxkAI HTTP/1.1" 302 -
INFO:root:"GET/HTTP/1.1" 302 -
INFO:oauth2client.client:Successfully retrieved access token
INFO:root:"GET /oauth2callback/?state=1Rwu-LG-cowGmf9UrW6EuzoxNDA5MTY3M&code=4/yaQK1MVKYh9PeSN7OilnYHzdfSf_.An4_j5za2IcboiIBeO6P2m9ej9cxkAI HTTP/1.1" 302 -
INFO:root:"GET/HTTP/1.1" 302 -
INFO:oauth2client.client:Successfully retrieved access token
INFO:root:"GET /oauth2callback/?state=1Rwu-LG-cowGmf9UrW6EuzoxNDA5MTY3M&code=4/yaQK1MVKYh9PeSN7OilnYHzdfSf_.An4_j5za2IcboiIBeO6P2m9ej9cxkAI HTTP/1.1" 302 -
je peux voir que les informations d'identification sont stockées avec succès dans le magasin de données avec l'ID correcte de l'utilisateur. Il semble que de stockage semble incapable de le récupérer (le credential
est None
)
PS: similaire à this unanswered question
Mise à jour
Le jeton que je reçois regarde en arrière comme ceci:
{'revoke_uri': 'https://accounts.google.com/o/oauth2/revoke',
'access_token': u'ya29.cACFl3-de08MsB0AAADMsAKOc4d06fkI71_YEAfoPWaG84f3PoPiMRUmdSMQw',
'token_uri': u'https://accounts.google.com/o/oauth2/token',
'token_response': {u'access_token': u'ya29.cACFl3-de08MsB0AAADMsAKOc4d06fkI71_YEAfoPWaG84f3PoPiMRUmdSMQw',
u'token_type': u'Bearer', u'expires_in': 396,
u'id_token': {u'aud': u'1020730626638-fdf06iqdihvr4lbldeg7jd7suuau9rl.apps.googleusercontent.com',
u'cid': u'1020730626638-fdf06iqdihvr4lbldeg7jd7suuau9rl.apps.googleusercontent.com',
u'iss': u'accounts.google.com', u'at_hash': u'n_NmKydTYbZIEzHVzUg0cw',
u'exp': 1409314030,
u'azp': u'1020730626638-fdf06iqdihvr4lbldeg7jd7suuau9rl.apps.googleusercontent.com',
u'iat': 1409310130, u'token_hash': u'n_NmKydTYbZIEzHVzUg0cw',
u'id': u'10694247378316072486', u'sub': u'10694247378316072486'}},
'invalid': False,
'refresh_token': None,
'client_id': u'1020730626638-fdf06iqdihvr4lbldeg7jd7suuau9rl.apps.googleusercontent.com',
'id_token': {u'aud': u'1020730626638-fdf06iqdihvr4lbldeg7jd7suuau9rl.apps.googleusercontent.com',
u'cid': u'1020730626638-fdf06iqdihvr4lbldeg7jd7suuau9rl.apps.googleusercontent.com',
u'iss': u'accounts.google.com', u'at_hash': u'n_NmKydTYbZIEzHVzUg0cw', u'exp': 1409314030,
u'azp': u'1020730626638-fdf06iqdihvr4lbldeg7jd7suuau9rl.apps.googleusercontent.com', u'iat': 1409310130,
u'token_hash': u'n_NmKydTYbZIEzHVzUg0cw', u'id': u'10694247378316072486',
u'sub': u'10694247378316072486'},
'client_secret': u'8B9ODH3EliQwcXRhF2f3qicN',
'token_expiry': datetime.datetime(2014, 8, 29, 12, 7, 7, 303770),
'store': None,
'user_agent': None
}
Si je change le gestionnaire de vue de rappel avec ce qui suit, en ajoutant une récupération immédiate:
credential = FLOW.step2_exchange(request.REQUEST)
storage = Storage(CredentialsModel, 'id', request.user, 'credential')
storage.put(credential)
credential = storage.get()
Alors que des titres de compétence dernier est None
Essayez-vous simplement de faire fonctionner OAuth pour pouvoir utiliser des API? – Ryan
@Bruyere Je pense que le serment fonctionne, c'est la classe Storage qui ne peut pas charger les informations d'identification. – Tjorriemorrie
Si vous voulez, je peux vous montrer comment utiliser un système Google qui gère le processus OAuth. Il gère le stockage et la récupération des informations d'identification, ainsi que l'actualisation si nécessaire. Cela peut résoudre votre problème mais impliquera une légère réécriture. – Ryan