我想提取 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/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()