我第一次涉足 Pyramid 安全模块。我正在使用此登录代码来设置 auth_tkt:
@view_config(route_name='LoginForm', request_method='POST', renderer='string')
class LoginForm(SimpleObject):
def __call__(self):
emailAddress = self.request.params.get('emailAddress')
password = self.request.params.get('password')
if emailAddress != 'testemail@gmail.com' or password != 'testpassword':
errorDictionary = { 'message' : "Either the email address or password is wrong." }
self.request.response.status = 400
return json.dumps( errorDictionary, default=json_util.default)
testUserGUID = '123123123'
headers = remember(self.request, testUserGUID)
return HTTPOk(headers=headers)
它似乎工作正常,但有一些令人费解的细节:
首先,实际上设置了 2 个 cookie 而不是一个。这 2 个 cookie 是相同的(都具有名称“auth_tkt”),除了一个区别:一个的主机值为“.www.mydomain.com”,而另一个 cookie 的主机值为“www.mydomain.com” 为什么是设置 2 个 cookie 而不是 1 个?不同的主机值有什么意义?
问题 2,网络工具报告这两个 cookie 都不安全。我可以做些什么来确保 cookie/s 是安全的?
问题 3:两个 cookie 的过期值都是“在会话结束时”。这是什么意思,我如何自己自定义到期值?登录 cookie 过期时间的推荐做法是什么?
问题4:我不明白为什么“remember”的第一个参数是self.request而不是self.request.response。不应该在响应对象而不是请求对象上记住数据吗?