Не найден прокси API для службы "memcache" в танце OAuth2.0 - PullRequest
6 голосов
/ 15 октября 2011

Я пытался внедрить 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('/')

Я только что установил модуль google_appengine-1.5.1 через pip, мое приложение работает на dev-сервере Django. Что я могу сделать, чтобы это исправить? Должен ли я запустить его только на GAE?

1 Ответ

5 голосов
/ 23 октября 2011

Похоже, вам нужно запустить GAE, потому что реализация OAth использует сервис memcache GAE.Вы сообщаете GAE API, что ваш сервер Django будет обрабатывать вызовы GAE.Возможно, вам нужно запустить сервер разработки GAE, чтобы он мог обрабатывать запросы.

Если вы не хотите запускать сервер GAE, похоже, что эта запись в блоге показываеткода, чтобы получить достаточно GAE для обслуживания этого запроса.

...