在OAuth2.0舞蹈中找不到服务“memcache”的api代理

时间:2011-10-15 14:02:23

标签: django django-views google-api oauth-2.0

我尝试将OAuth2.0实施到我的应用程序中,但我遇到了一个问题,我现在无法修复。

错误是:

Traceback:
File "/home/i159/Envs/photorulez/lib/python2.6/site- packages/django/core/handlers/base.py" in get_response
111.                         response = callback(request, *callback_args,   **callback_kwargs)
File "/home/i159/workspace/photorulez/photorulez/photoapp/views.py" in get_token
63.     saved_token = gdata.gauth.AeLoad(request.GET.get('oauth_token'))
File "/home/i159/Envs/photorulez/lib/python2.6/site-packages/gdata/gauth.py" in ae_load
1289.   token_string = gdata.alt.app_engine.get_token(key_name)
File "/home/i159/Envs/photorulez/lib/python2.6/site-packages/gdata/alt/app_engine.py" in get_token
51.   token_string = memcache.get(unique_key)
File "/home/i159/Envs/photorulez/lib/python2.6/site-  packages/google/appengine/api/memcache/__init__.py" in get
487.       self._make_sync_call('memcache', 'Get', request, response)
File "/home/i159/Envs/photorulez/lib/python2.6/site-packages/google/appengine/api/apiproxy_stub_map.py" in MakeSyncCall
94.   return stubmap.MakeSyncCall(service, call, request, response)
File "/home/i159/Envs/photorulez/lib/python2.6/site-packages/google/appengine/api/apiproxy_stub_map.py" in MakeSyncCall
301.     assert stub, 'No api proxy found for service "%s"' % service

Exception Type: AssertionError at /get_access_token/
Exception Value: No api proxy found for service "memcache"

代码是:

CONSUMER_KEY = 'anonymous'
CONSUMER_SECRET = 'anonymous'
SCOPES = ['https://picasaweb.google.com/data/',]

def oauth2_login(request):
    client = gdata.docs.client.DocsClient(source='photorulez')

    oauth_callback_url = 'http://%s/get_access_token' % '127.0.0.1:8000'

    request_token = client.GetOAuthToken(
        SCOPES, 
        oauth_callback_url, 
        CONSUMER_KEY, 
        consumer_secret=CONSUMER_SECRET)

    request.session['request_token'] = request_token
    return HttpResponseRedirect(request_token.generate_authorization_url())


def get_token(request):
    client = gdata.docs.client.DocsClient(source='photorulez')
    saved_token = gdata.gauth.AeLoad(request.GET.get('oauth_token'))
    uri = 'http://127.0.0.1:8000'

    request_token = gdata.gauth.AuthorizeRequestToken(
        saved_token, 
        uri)    
    access_token = client.GetAccessToken(request_token)

    client.auth_token = gdata.gauth.OAuthHmacToken(CONSUMER_KEY,
        CONSUMER_SECRET,
        access_token.token,
        access_token.token_secret,
        gdata.gauth.ACCESS_TOKEN)
    return HttpResponseRedirect('/')

我刚刚通过pip安装了google_appengine-1.5.1模块,我的应用程序在Django dev-server上运行。我该怎么办才能修复它?我应该只在GAE上运行吗?

1 个答案:

答案 0 :(得分:5)

看起来您需要运行GAE,因为OAth实现使用GAE内存缓存服务。您告诉GAE API您的Django服务器将处理GAE调用。您可能需要运行GAE dev服务器,以便它可以处理请求。

如果您不想运行GAE服务器,看起来this blog entry会显示代码,以便为运行此请求提供足够的GAE。