惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
T
The Blog of Author Tim Ferriss
U
Unit 42
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
Vercel News
Vercel News
MongoDB | Blog
MongoDB | Blog
P
Proofpoint News Feed
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
大猫的无限游戏
大猫的无限游戏
C
Check Point Blog
Blog — PlanetScale
Blog — PlanetScale
I
InfoQ
Y
Y Combinator Blog
F
Full Disclosure
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗
S
SegmentFault 最新的问题
腾讯CDC
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Visual Studio Blog
Apple Machine Learning Research
Apple Machine Learning Research
人人都是产品经理
人人都是产品经理
Recent Commits to openclaw:main
Recent Commits to openclaw:main
The Register - Security
The Register - Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Azure Blog
Microsoft Azure Blog
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
F
Fortinet All Blogs
C
CXSECURITY Database RSS Feed - CXSecurity.com
Hugging Face - Blog
Hugging Face - Blog
T
Threatpost
GbyAI
GbyAI
G
GRAHAM CLULEY
L
Lohrmann on Cybersecurity
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
L
LangChain Blog
T
Tenable Blog
C
Cisco Blogs
T
Threat Research - Cisco Blogs
Google Online Security Blog
Google Online Security Blog

Tornado

docker 多进程部署 tornado - V2EX Tornado 如何拿到传输的文件流 - V2EX Tornado 的异步 怎么写的 - V2EX tornado 下 ckeditor 图片上传问题 - V2EX Tornado 异步怎么写的? - V2EX tornado 怎么能确保端口挂了 服务也不会停止? - V2EX Tornado 路由有什么好方法,一个一个写太麻烦了,有没有根据 url 和注解匹配的方法呢 - V2EX Tornado V4.5 release pypy 拿到赞助之后出了支持 Python3.5 的版本 - V2EX 请教 tornado 文件上传问题 tornado 做后台服务,如果前端没有用 cookie. - V2EX tornado 优秀项目推荐 问一个 tornado 解决阻塞的方案问题? - V2EX tornaqiniu(基于 tornado 的异步七牛 sdk) tornado 并行异步,如何保证在只有部分请求成功后,结果依旧可用。 - V2EX nginx 反向代理 tornado,如何 location 首页u rl? - V2EX 问一个关于 tornado 异常处理的新手问题 - V2EX tornado 的 coroutine 能和自定义的装饰器一起使用吗?? - V2EX Tornado 并发数很低,正常么? - V2EX 阅读 Tornado 源码过程中的一个疑惑,求解答 - V2EX gtornado - tornado 中 pymysql, pymemcache, storm orm 支持库 - V2EX Tornado 如何组织中大型项目,你们都是怎么样做的? - V2EX tornado 跑不通,小白求帮忙 - V2EX Tornado 4.3 发布 - V2EX Tornado 官方怎么不好好维护一个 sql 的异步数据库驱动? - V2EX 关于 tornado 阻塞的问题 - V2EX tornado 的 mysql 异步驱动性能测试 pypy 之 tornado - V2EX tornado 多个 url - V2EX tornado 动态添加 url 的问题 tornado 怎么利用'next'参数进行页面跳转 finish() called twice 阿里云 ECS 1CPU 1G 1Mbs 跑 tornado 开多少进程合适? tornado.locale.format_date()的日期汉化问题 Tornado 分页问题求解! Tornado 开发中出错调试如何像 PHP 一样? - V2EX 新手完全不懂 tornado.concurrent.Future 有多少人 有付费学习 Tornado 的意愿,这是一个学习网站。 - V2EX 请问下 tornado 在 ios app 后台方面有成熟的实现吗? 新手求教关于 Tornado + SQLite 的两个问题 - V2EX Tornado 4.1 - V2EX 关于优雅地部署 Tornado 新代码的一种方式 - V2EX Tornado Template 如何获得 JavaScript 中的 var 变量? 学习 "Introduction to tornado" 提问 - V2EX 用 Tornado + Mongodb 开发要注意什么? - V2EX 用 Tornado 做的网站,大家在写测试的时候,一般都是怎么做的呢? - V2EX 分享本人基于 tornado 开发的应用层框架 - V2EX Nginx 多端口运行 Tornado 如何获取当前端口 - V2EX Tornado 框架如何写 MVC 模式? - V2EX
RequestHandler 类的 get_current_user() 方法覆写无效
roychan · 2015-07-27 · via Tornado

这是一个创建于 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 日

谢谢各位,问题解决了,下次我会多测试再来提问。

gx

1

gx      2015 年 7 月 28 日   ❤️ 1

`self.current_user`可以当作是`get_current_user`的一个缓存,如果你复写的`get_current_user`在第一次返回None的话,之后使用`self.current_user`是直接读取缓存的结果。

解决方案:
当你做登陆操作时,除了`set_secure_cookie`之外,可以给current_user赋值:
```
user = {'id': "v2ext208772", 'name': "roychan"}
self.current_user = user
```

roychan

2

roychan      2015 年 7 月 28 日   ❤️ 1

@gx
那么是否退出的时候要再将这个值设置为 None?
这样是不是没有用到 Tornado 内置的 auth 功能了?

roychan

4

roychan      2015 年 7 月 28 日

@mulog

正如一楼所说,get_current_user 方法在调用 current_user 方法时会被调用一次,然后将自身的 _current_user 属性设置为当前用户,以后直接调用自身属性,此为「缓存」。

假设:我现在要求访问登录页面也需要登录。那么在访问登录页面之前,需要调用一次 current_user 这个方法(也是属性)来验证是否登录。如果用户未登录,此时 current_user 值便成为了 None,即便登录后,使用 current_user 属性来验证的话,也依旧是 NoneType。

我想在不覆写 Tornado 源代码的情况下最大化实现其内置功能。如果还要自己加一个属性,那么我感觉设置安全 cookie 的验证步骤可以省去了(除了用来保持登录)。

roychan

5

roychan      2015 年 7 月 28 日

@mulog

按照官方文档来看的话,只需要覆写 get_current_user 方法就可以了,不知道为什么不行。

siteshen

6

siteshen      2015 年 7 月 28 日 via iPhone

POST /login 后应该返回302,而不是继续停留在 /login 页面。

siteshen

7

siteshen      2015 年 7 月 28 日 via iPhone

@siteshen logout 同理,这样就能保证登录状态在整个请求中一致。

mulog

9

mulog      2015 年 7 月 28 日

@roychan
可是缓存也只是在同一个请求之内啊 你访问另一个页面/刷新之后哪来的缓存。。

roychan

10

roychan      2015 年 7 月 28 日

那如何解决手动访问登录页的问题呢…

gx

11

gx      2015 年 7 月 28 日

@roychan 这个_current_user存在于内存当中,准确的说是在一个http_request生命周期内有效。

只要你重置了cookie,再次开始一个request都是current_user都是None;

一般情况下,登入和登出都会301/302,当然如果是单页面应用可以再次请求状态。

siteshen

12

siteshen      2015 年 7 月 29 日

@roychan 登录页面的作用仅仅是用于浏览器告诉服务器自己是谁,“已经登录”的意思是服务器知道你是谁了,登录过的用户服务器认为他应该到哪就返回 302 跳转到哪。

def login(request, next_url=None):
if self.current_user:
redirect(next_url or '/dashboard')