如何在Tornado中正确进行用户认证和会话管理?
我有一个用Tornado框架做的网页应用,登录时我使用了Google的Oauth和Facebook的Graph Mixin。一旦用户授权,我会把他的邮箱存到cookie里:
self.set_secure_cookie('trakr', user['email'])
在后续的请求中,我会检查这个cookie是否存在。如果存在,我就从cookie里取出邮箱,然后用这个邮箱去查询数据库。
为了安全起见,我会用一个叫cookie_secret
的东西对邮箱进行加密,这样邮箱就不会以明文形式显示出来。今天我用另一个邮箱登录,记下了它的cookie值。然后我又用我的主邮箱登录,修改了cookie的值为另一个用户的值,刷新页面后,我竟然能看到另一个用户的内容!
那么我该如何解决这个问题呢?或者说,如果有人获取了我的cookies,他们就可以一直以我的身份登录,这样可以吗?
1 个回答
0
感谢Jeff,解决方案很简单。让你的 cookies 设置为 httpOnly
。
在创建 cookie 的时候,把这个设置为 True
。
self.set_secure_cookie('trakr', user['email'], httpOnly=True)