





















这是一个创建于 3974 天前的主题,其中的信息可能已经有所发展或是发生改变。
刚刚开始用 Tornado。
在用户认证时,我覆写了 BaseHandler,以便使用内置的 current_user() 方法与 is_authenticated 修饰器。
class BaseHandler(tornado.web.RequestHandler):
def get_current_user(self):
return self.get_secure_cookie('user')
在某步中,我加了判断 if self.current_user then xxx,此时即便登录了也无法执行 xxx,如果我把判断写成 if self.get_current_user then xxx,便能成功确认登录,xxx 就执行了。
请问这可能是什么问题?
第 1 条附言 · 2015 年 7 月 29 日
谢谢各位,问题解决了,下次我会多测试再来提问。
1 gx 2015 年 7 月 28 日`self.current_user`可以当作是`get_current_user`的一个缓存,如果你复写的`get_current_user`在第一次返回None的话,之后使用`self.current_user`是直接读取缓存的结果。 解决方案: |
4 roychan 2015 年 7 月 28 日正如一楼所说,get_current_user 方法在调用 current_user 方法时会被调用一次,然后将自身的 _current_user 属性设置为当前用户,以后直接调用自身属性,此为「缓存」。 假设:我现在要求访问登录页面也需要登录。那么在访问登录页面之前,需要调用一次 current_user 这个方法(也是属性)来验证是否登录。如果用户未登录,此时 current_user 值便成为了 None,即便登录后,使用 current_user 属性来验证的话,也依旧是 NoneType。 我想在不覆写 Tornado 源代码的情况下最大化实现其内置功能。如果还要自己加一个属性,那么我感觉设置安全 cookie 的验证步骤可以省去了(除了用来保持登录)。 |
6 siteshen 2015 年 7 月 28 日 via iPhonePOST /login 后应该返回302,而不是继续停留在 /login 页面。 |
10 roychan 2015 年 7 月 28 日那如何解决手动访问登录页的问题呢… |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。