Не удается получить токен аутентификации для GData после аутентификации в App Engine - PullRequest
0 голосов
/ 20 января 2010

Я хотел бы получить токен авторизации для аутентификации Gdata, чтобы я мог писать в календарь Google. У меня проблемы с получением токена после аутентификации, чтобы я мог отправить токен службе календаря.

Я использую экран входа по умолчанию, предоставленный appengine (/ _ah / login), и я могу войти в систему и пройти аутентификацию, однако я не могу извлечь токен аутентификации из self.request.uri, потому что URL-адрес переписывается:

Пример:

Перенаправление экрана входа в систему с сайта kiddushfund.appspot.com/admin https://www.google.com/accounts/ServiceLogin?service=ah&continue=http://appname.appspot.com/_ah/login%3Fcontinue%3Dhttp://appname.appspot.com/admin&ltmpl=gm&ahname=App+Name&sig=65e70293a754da54fe06ecbedbb59213

Это после аутентификации, и URL был извлечен из firebug http://appname.appspot.com/_ah/login?continue=http://appname.appspot.com/admin&auth=DQAAAL0AAAD9X_Noig8blUlg_KA02UbjgBC2yWl8XKXIVA3SI5ZQ7pJOyL4SyYPpKu5jOLAw0ol0rSUVBENBMmWC2DkH6sTxx3AlSF4UI_LcByDlacBV3Fy1At80h_ML97fLeu0LLQbgzuLxY_wTHBb5svkCVDOeVABFKf98qvZ62SGl0PrDTxs1P3lCF04ooDdFilDecGUoED6hbnjd9P7-6eqxOO9nrBCSk571uyWZCLIA-1I5f3Om_MqAIPmi_5mqLXOSv0I

Это последний URL после аутентификации, но я больше не могу получить токен http://appname.appspot.com/admin

Это кажется очень простой проблемой, и любая помощь будет признательна. Спасибо.

from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import users
from google.appengine.ext import webapp

import atom
import settings
import os
import urllib
import urllib2
import cookielib

import gdata.service
import gdata.auth
import gdata.alt.appengine
import gdata.calendar
import gdata.calendar.service


class Auth(webapp.RequestHandler):
    def __init__(self):
        self.calendar_client = gdata.calendar.service.CalendarService()
        gdata.alt.appengine.run_on_appengine(self.calendar_client)

def get(self):
    user = users.get_current_user()
    if user:
        token_request_url = None
        auth_token = gdata.auth.extract_auth_sub_token_from_url(self.request.uri)

        if auth_token:
            self.calendar_client.SetAuthSubToken(self.calendar_client.upgrade_to_session_token(auth_token))

        if not isinstance(self.calendar_client.token_store.find_token(
                'http://www.google.com/calendar/feeds/'),gdata.auth.AuthSubToken):
                token_request_url = gdata.auth.generate_auth_sub_url(self.request.uri,
                ('http://www.google.com/calendar/feeds/default/',))

        #This is where I were I would look for the token but the self.request.url
        # is only return http://appname.appspot.admin - with no token.  
        self.response.out.write(self.request.uri)

    else:
        self.redirect(users.create_login_url(self.request.uri))



def main():
    application = webapp.WSGIApplication([('/.*', Auth),], debug=True)
    run_wsgi_app(application)

if __name__ == '__main__':
    main()

Ответы [ 2 ]

3 голосов
/ 20 января 2010

Экран входа в систему только аутентифицирует пользователя в вашем приложении, он не дает вам авторизацию для gdata пользователя.

Вам нужно будет разрешить пользователю авторизовать использование API-интерфейса календаря. Я предлагаю через oauth: http://code.google.com/apis/gdata/docs/auth/overview.html#OAuth.

Вам нужно сделать это только один раз, а затем сохранить токен oauth для этого пользователя для всех последующих вызовов.

0 голосов
/ 24 сентября 2010

Существуют ограничения на количество выдающихся токенов - например, количество пользователей возможно. Как насчет количества выдающихся токенов ClientLogin?

...