我试图覆盖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
方法的开头,则效果非常好。但它缺乏安全性。
答案 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
代码。