Google app engine Django Nonl无法通过存储检索保存的凭据

Google app engine Django Nonl无法通过存储检索保存的凭据,google-app-engine,google-oauth,django-nonrel,Google App Engine,Google Oauth,Django Nonrel,为了使用API,我正在尝试使默认示例应用程序正常工作(与本例相同): 我已成功检索访问令牌,但我的索引视图处理程序无法检索保存在回调上的凭据。这意味着我的视图处于一个无休止的重定向循环中,要求API访问它已经拥有的全部时间: INFO:root:"GET / HTTP/1.1" 302 - INFO:oauth2client.client:Successfully retrieved access token INFO:root:"GET /oauth2callback/?state=1Rwu

为了使用API,我正在尝试使默认示例应用程序正常工作(与本例相同):

我已成功检索访问令牌,但我的索引视图处理程序无法检索保存在回调上的凭据。这意味着我的视图处于一个无休止的重定向循环中,要求API访问它已经拥有的全部时间:

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 -
我可以看到凭据已成功存储在数据存储中,并具有正确的用户id。存储器似乎无法检索它(凭证

附言:类似于

更新

我收到的回币如下所示:

{'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
}
如果我通过添加即时检索,使用以下内容更改回调视图处理程序:

credential = FLOW.step2_exchange(request.REQUEST)
storage = Storage(CredentialsModel, 'id', request.user, 'credential')
storage.put(credential)
credential = storage.get()

然后,最后一个凭证是
None

我在CredentialsModel类的ForeignKey属性上将primary\u key=True更改为unique=True。一旦我做了这个更改,存储对象就能够正确地获取用户存储的凭据。

你只是想让OAuth工作以便使用API吗?@Bruyere我认为誓言是有效的,是存储类无法加载凭据。如果你想,我可以向你展示如何使用处理OAuth进程的Google系统。它负责存储和检索凭据,并在需要时进行刷新。它可能会解决您的问题,但会涉及到轻微的重写。@Bruyere我不介意,但django Nonl是必需的。对不起,我在阅读该部分时用空格隔开了。如果转到数据存储查看器,是否列出了任何内容?