请教,Flask 的用户登录凭证保存最佳实践及其它几个问题

2012-12-24 19:43:00 +08:00
 willerce
nodejs 新手变身 python 新手,特来请教各位。

**目前我这么使用**


1. 使用了 Flask-Principal 的权限控制,目前只有会员这一个权限
2. 成功登录后,会把 user对象 保存到 session 中,另外还保存了 user 的所属 group 对象


**几个问题**

1. 我这种是否有必要使用 Flask-Principal ,Flask-Login 是不是已经足够了。
2. 一旦有更新 user 内容的操作,一定要 session['user'] = user 一次,不然 sqlalchemy 提示对象未绑定。
3. 我把数据库清空后,用户的登录cookie依然存在,这时还能读出 session['user'] 里的信息,但用户实际已经被删除了,这种情况下,是不是应该在 @identity_loaded.connect_via 绑定方法中,直接向数据库查询。
4. 我看了 newsmeme, june, feather, pypress 等源码,他们的登录实现是否靠谱,因为我看后三者好像很多都在学习 newsmeme ,但 newsmeme 项目比较老并停止维护了。

先谢谢各位。
7443 次点击
所在节点    Python
7 条回复
notedit
2012-12-24 19:57:27 +08:00
Flask-Principal 没用过,我说一下我能回答的吧,

1,你的情况flask-login 已经完全能满足
2, 这个我没遇到过,但sqlalchemy有其不方便的地方
3, 不清楚
4, newsmem 有不少值得借鉴的地方 但newsmem用到的module 来组织app已经被flask废弃了 现在用blueprint
talentsnail
2012-12-24 19:58:10 +08:00
收藏一下,等回复,问题都是我关心的。
willerce
2012-12-24 20:17:30 +08:00
@notedit 我猜测是这样: flask 把 session 中的对象通过SECRET_KEY加密后直接扔到cookie(所以 flask 的 session 感觉都特别大)。

猜测的理由:把 cookie 或 修改 SECRET_KEY 后 restar,session 就不存在了。
armoni
2012-12-24 20:42:54 +08:00
答下三:只靠cookie来实现保存登陆功能是比较初级和差安全性的,真实实现不靠谱,具体可参考《你会做Web上的用户登录功能吗?》http://coolshell.cn/articles/5353.html
willerce
2012-12-24 21:08:58 +08:00
@armoni 谢谢你的回复及提供的资料,但与我的问题似乎没有什么直接联系。
againstodds
2012-12-24 21:45:12 +08:00
2. 直接使用flask.ext.login.current_user 来获得当前session的用户,不需要在把user set到session中
3. 你的user是自己放到session中的,数据库删掉以后,session也要清空。合理的做法应该是服务器拿到用户的cookie,然后去数据库中查找用户是否存在,不存在的话就让用户重新登陆(顺便清空session)。identity_loaded 是用户存在的基础上,用来load用户的角色,权限的。所以不适用在你这个例子上。
kebot
2012-12-25 00:10:33 +08:00
另外: flask的session是默认保存在 cookie 里的, 这本质上是保存在客户端的.
如果要使用server-side session, 可以参考这个:

保存在redis里面的: http://flask.pocoo.org/snippets/75/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/55727

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX