GAE self.request.cookies返回一个空的dict

时间:2016-01-12 07:55:31

标签: python google-app-engine

我试图覆盖CheckIsAdmin类中的ApiCallHandler方法。所以我跟着this回答。但是我总是在打印self.request.cookies时得到空白的字典。

在某些时候,我得到了打印self.request.cookies的值,但不是它不会。我已经检查过我的服务器正在运行,而且我已经进入了。

remote_api.py看起来像

import re
import models
from google.appengine.ext.remote_api import handler
from google.appengine.ext import webapp

MY_SECRET_KEY = 'foo@bar.com'  # make one up, use the same one in the shell command


class ApiCallHandler(handler.ApiCallHandler):

    def CheckIsAdmin(self):
        '''
        Determine if admin access should be granted based on the
        auth cookie passed with the request.
        '''

        '''
        print 'App id ' + models.APPLICATION_ID
        print 'on checkIsAdmin'
        print 'request.cookies ' + str(self.request.cookies)
        login_cookie = self.request.cookies.get('dev_appserver_login', '')
        match = login_cookie.split(':')
        print 'headers '+ str(self.request.headers)
        if match and match[0] == MY_SECRET_KEY \
                and 'X-Appcfg-Api-Version' in self.request.headers:
            print 'Going to return true'
            return True

app = webapp.WSGIApplication([('.*', ApiCallHandler)])

app.yaml的一部分看起来像

- url: /remoteapi.*
    script: api.remote_api.app

.py文件夹中存在api文件,这是正确的。

当我尝试过这个命令时,

echo "foo@bar.com" | appcfg.py upload_data --email=some@example.org --passin --url=http://localhost:8080/remoteapi --num_threads=4  --db_filename=bulkloader.csv

它显示无效参数--passin,如果我将return True置于CheckIsAdmin方法的开头,则效果非常好。但它缺乏安全性。

1 个答案:

答案 0 :(得分:1)

看起来他们删除了--passin,现在完全依赖于oauth。

https://code.google.com/p/googleappengine/wiki/SdkReleaseNotes#Version_1.9.24_-_July_20,_2015

--passin是导致Cookie设置的标志。您似乎需要降级到低于1.9.24的sdk版本或更改命令以使用oauth并删除自定义ApiCallHandler代码。