2014-08-28 1 views
0

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

+0

Essayez-vous simplement de faire fonctionner OAuth pour pouvoir utiliser des API? – Ryan

+0

@Bruyere Je pense que le serment fonctionne, c'est la classe Storage qui ne peut pas charger les informations d'identification. – Tjorriemorrie

+0

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

Répondre

0

j'ai changé primary_key = True à uniques = True sur la propriété ForeignKey dans la classe CredentialsModel. Une fois que j'ai effectué cette modification, l'objet Stockage a pu obtenir correctement les informations d'identification stockées de l'utilisateur.

Questions connexes