news 2026/5/1 6:46:08

Flask-Login深度详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flask-Login深度详解

1. 他是什么

Flask-Login 是 Flask 框架下的一个扩展,专门负责管理网站的“谁进来了”这件事。
可以把它想象成办公楼大厅的前台:不关心你是哪个公司、工号是多少,也不负责核对你的身份证真伪,只负责在你刷卡进门后给你一张临时访客贴纸,并在你走动时认出你。

2. 他能做什么

  • 标记登录状态:用户登录后,后续的每一次请求都能被识别出“这个请求来自张三”。

  • 限制未登录用户:可以轻松指定某些页面只有贴了访客贴纸的人才能进,没贴的直接拦到登录页。

  • 延长登录时效:允许用户勾选“保持登录”,即使关掉浏览器再打开,那张访客贴纸依然有效。

  • 清理状态:用户点“退出”时,贴纸当场撕掉,后续请求恢复成陌生人状态。

3. 怎么使用

安装扩展后,核心流程只需要五步:

第一步:初始化前台

python

from flask_login import LoginManager login_manager = LoginManager() login_manager.init_app(app)

第二步:告诉前台如何根据ID找到人

python

@login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id)) # 从数据库取回用户对象

第三步:让用户类具备被识别能力
最简单的方式是继承UserMixin,它把is_authenticatedget_id()等必要方法都备好了。

python

from flask_login import UserMixin class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True)

第四步:用户登录时发贴纸
验证账号密码通过后,调用login_user(user, remember=True),贴纸就贴上了。
remember=True对应“保持登录”选项。

第五步:给需要权限的页面装门禁

python

from flask_login import login_required @app.route('/dashboard') @login_required def dashboard(): return '欢迎回来'

登出时调用logout_user(),贴纸撕掉。

4. 最佳实践

  • 密码安全与Flask-Login解耦
    Flask-Login 不碰密码。密码哈希用 Werkzeug 的generate_password_hashcheck_password_hash单独处理,登录时比对哈希值。

  • 未登录用户往哪送
    设置login_manager.login_view = 'login',未登录用户访问被保护页面时会自动跳转到登录路由。
    如果需要更细致的提示,可以用login_manager.unauthorized_handler自定义。

  • 会话防劫持
    app.secret_key设置一个高强度随机值。
    生产环境可以开启SESSION_PROTECTION = "strong",当 IP 地址等环境信息突变时会自动注销旧会话。

  • 用户对象只存标识
    user_loader返回的用户对象应该只包含 id、用户名等固定信息。头像地址、权限列表等易变或敏感数据,每次使用时从数据库实时取,避免会话过期后用户数据仍是旧版本。

  • 显式处理匿名用户
    模板或视图中可以用current_user.is_authenticated判断当前是否有人登录。
    current_user在没有登录时是一个匿名用户对象,它的is_authenticated返回False

5. 和同类技术对比

技术定位典型场景与 Flask-Login 的关系
Flask-Login会话状态管理器,只关心“你是谁”传统服务端渲染的 Web 应用————
Flask-Security全家桶:登录、注册、密码重置、角色权限等需要开箱即用全套安全功能内部依赖 Flask-Login 做会话
Flask-JWT-Extended基于令牌的认证,无状态前后端分离的 API / 移动端不同路线,不依赖会话和 Cookie
Flask-User类似 Security,更侧重用户账户管理快速搭建含邮箱验证的用户系统同样依赖 Flask-Login

如何选

  • 如果做的是一个传统 Web 网站,页面由 Flask 渲染,用户登录状态靠 Cookie 维持,Flask-Login 是最直接、最轻量的选择

  • 如果项目刚启动且希望尽快拥有注册、密码找回等全套功能,可以考虑Flask-Security,它用 Flask-Login 处理登录状态,上层帮你搭好了脚手架。

  • 如果写的是纯 API 服务,不涉及服务端渲染页面,Flask-JWT-Extended更合适,无状态、跨语言、适合移动端。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 4:07:44

如何理解词嵌入的维度?维度越大越好吗?

在学习自然语言处理(NLP)时,很多人都会遇到一个问题: 词嵌入的维度到底是什么意思? 为什么有的模型用 100 维,有的用 300 维,而 BERT 却是 768 维? 维度越大越好吗? 每…

作者头像 李华
网站建设 2026/5/1 4:08:28

SpringBoot打包可执行jar包启动方式:JarLauncher、PropertiesLauncher

文章目录1, 项目结构2, 默认打包可执行jar启动主类:JarLauncher3, 打包可执行jar启动主类:PropertiesLauncher1, 项目结构 springboot-tar-demo/ ├── src/ │ ├── main/ │ │ ├── assembly/ │ │ │ └── assembly.xml # 上述…

作者头像 李华
网站建设 2026/5/1 4:06:51

为什么 UI 半透明面板会出现“黑边”和“发灰”:一篇把你从玄学里拎出来的透明指南

你肯定遇到过这种场面: 你做了个很常见的 UI 弹窗: 背景来一层半透明黑遮罩,弹窗面板是圆角、带柔和透明边缘的 PNG。 在编辑器里一看——哎挺好。 一跑真机——圆角边缘一圈黑线;或者整张面板“发灰”,像蒙了一层雾;再或者跟背景叠一起颜色不对,黑得不干净、灰得不高级…

作者头像 李华
网站建设 2026/5/1 4:06:54

欧盟与印度自贸协定开启IT服务新时代

欧盟与印度达成的首个自由贸易协定可能推动印度IT服务提供商在欧洲大陆扩展业务,为其打开大量未开发的市场机遇。虽然北欧和比荷卢地区等较小经济体集群已经成为印度IT服务公司的成功市场,但在一些更大的经济体中,这些公司仍有巨大的增长空间…

作者头像 李华
网站建设 2026/5/1 4:04:50

Git Worktree + Claude Code:多终端并发开发完全实战

引言:等待 AI 的时间浪费 如果你已经开始使用 Claude Code 进行开发,一定遇到过这样的场景: 场景 1: 让 AI 分析一个复杂的 Bug,你坐在电脑前等了 5 分钟,AI 还在读代码… 场景 2: 让 AI 重构一个大模块,15 分钟过去了,你刷完了朋友圈,AI 还在工作… 场景 3: 临时有个紧急 Bug…

作者头像 李华
网站建设 2026/5/1 4:02:17

1.8 本章小结 记住这3点后面少踩坑

1.8 本章小结:记住这 3 点,后面少踩坑 本节学习目标 把第 1 章内容归纳成三条主线,便于记忆与复述。 明确与第 2 章(技术框架)的衔接点,减少学习断层。 用「少踩坑」清单做自检,避免常见概念与设计错误。 一、三条主线(记住这 3 点) 1. Agent 是什么、和普通程序差在…

作者头像 李华