V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
willerce
V2EX  ›  Python

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

  •  
  •   willerce ·
    willerce · 2012-12-24 19:43:00 +08:00 · 7337 次点击
    这是一个创建于 4140 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 项目比较老并停止维护了。

    先谢谢各位。
    7 条回复    1970-01-01 08:00:00 +08:00
    notedit
        1
    notedit  
       2012-12-24 19:57:27 +08:00   ❤️ 1
    Flask-Principal 没用过,我说一下我能回答的吧,

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

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

    保存在redis里面的: http://flask.pocoo.org/snippets/75/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3238 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:39 · PVG 21:39 · LAX 06:39 · JFK 09:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.