我正在使用 google 的 oauth2client 库供 GAE 从 GAE 应用程序访问 google 分析数据。当我第一次从 Web 浏览器点击 URL 时,它获取了我的凭据并生成了一个令牌。我的计划是在每晚运行的 cron 作业中重新使用该令牌。
但是,该 cron 作业总是 302,我认为这意味着我的令牌未被接受。一些代码:
class GetGAHandler(webapp.RequestHandler):
@decorator.oauth_required
def get(self):
if not decorator.has_credentials():
logging.error("GA is asking for auth. Please visit %s" % self.request.url)
self.redirect(decorator.authorize_url())
return
(之后我会做一些有用的事情。)
当我从浏览器中点击它时,它从不询问我的凭据,所以我认为令牌很好。但是,当我的 cron 运行时,会发生这种情况:
2013-02-18 20:00:00.224 /admin/getGA 302 10ms 0kb AppEngine-Google; (+http://code.google.com/appengine)
0.1.0.1 - - [18/Feb/2013:17:00:00 -0800] "GET /admin/getGA HTTP/1.1" 302 426 - "AppEngine-Google; (+http://code.google.com/appengine)" "kaon-log.appspot.com" ms=10 cpu_ms=0 cpm_usd=0.000048 queue_name=__cron task_name=ff7194e21b55970ebaf7e369504de801 instance=00c61b117cbe215d928dbc53a31f55fb06f769b5
如您所见,有一个 302,但没有日志消息,所以我猜装饰器正在执行重定向。
我错过了什么?从 cron 访问 OAuth2 API 一定是很常见的事情......