0

我想提取 Gdata 身份验证的身份验证令牌,以便我可以写入谷歌日历。我在身份验证后获取令牌时遇到问题,以便我可以将令牌发送到日历服务。

我正在使用 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<mpl=gm&ahname=App+Name&sig=65e70293a754da54fe06ecbedbb59213

这是认证和URL是萤火虫的拉出后 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()
4

2 回答 2

3

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

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

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

于 2010-01-20T14:17:05.200 回答
0

未偿代币的数量有限制 - 例如可能的用户数量。未完成的 ClientLogin 令牌数量如何?

于 2010-09-23T22:10:17.433 回答