在App Engine上进行身份验证后无法获取GData的身份验证令牌

时间:2010-01-20 10:43:01

标签: python google-app-engine gdata-api gdata google-data-api

我想为Gdata auth提取Auth Token,以便我可以写入Google日历。我在验证后获取令牌时遇到问题,以便我可以将令牌发送到日历服务。

我正在使用appengine(/ _ah / login)提供的默认登录屏幕,我可以登录和验证,但是,我无法从aut.request.uri中取出Auth Token,因为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

这是在身份验证之后,网址已从萤火虫中拉出来 http://appname.appspot.com/_ah/login?continue=http://appname.appspot.com/admin&auth=DQAAAL0AAAD9X_Noig8blUlg_KA02UbjgBC2yWl8XKXIVA3SI5ZQ7pJOyL4SyYPpKu5jOLAw0ol0rSUVBENBMmWC2DkH6sTxx3AlSF4UI_LcByDlacBV3Fy1At80h_ML97fLeu0LLQbgzuLxY_wTHBb5svkCVDOeVABFKf98qvZ62SGl0PrDTxs1P3lCF04ooDdFilDecGUoED6hbnjd9P7-6eqxOO9nrBCSk571uyWZCLIA-1I5f3Om_MqAIPmi_5mqLXOSv0I

这是身份验证后的最终网址,但我无法再提取令牌 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 个答案:

答案 0 :(得分:3)

登录屏幕仅对您的应用程序的用户进行身份验证,它不会授予您对用户的gdata的授权。

您需要让用户授权您使用日历API - 我建议通过oauth:http://code.google.com/apis/gdata/docs/auth/overview.html#OAuth

您只需要执行一次,然后为该用户存储oauth令牌以用于所有后续调用。

答案 1 :(得分:0)

有关令牌数量的限制 - 例如可能的用户数量。那些ClientLogin令牌的数量如何?