Flask怎么实现用户登录和注册功能

酷敏大大_2252

酷敏大大_2252

2026-09-19

870人浏览

原创

必须用。flask 本身不提供用户会话管理,flask-login 是事实标准,负责 login_user()、logout_user()、current_user 和自动跳转登录页,避免手动操作 session 和写拦截逻辑出错。

flask怎么实现用户登录和注册功能

Flask 中用 Flask-Login 管理登录状态是否必要?

必须用。Flask 本身不提供用户会话管理,Flask-Login 是事实标准——它帮你处理 login_user()logout_user()current_user 和登录跳转(比如访问 /profile 时自动跳到 /login)。不用它,你得自己操作 session、检查 request.cookies、写装饰器拦截未登录请求,极易出错。

安装和基础配置只需三步:

  • 运行 pip install flask-login
  • 在应用中初始化:login_manager = LoginManager(); login_manager.init_app(app)
  • 设置 login_manager.login_view = 'login'(指定未登录时跳转的端点名)

关键点:你的用户模型(比如 User 类)必须实现 is_authenticatedis_activeget_id() 这三个属性/方法,否则 current_user 会报 AttributeError

密码怎么存?直接 hashlib.md5() 行不行?

绝对不行。MD5、SHA1 都是快速哈希,现代 GPU 几秒就能暴力破解一个 8 位密码。必须用加盐且慢速的方案。

推荐用 werkzeug.security(Flask 自带,无需额外安装):

from werkzeug.security import generate_password_hash, check_password_hash
<h1>注册时保存</h1><p>hashed_pw = generate_password_hash(password, method='scrypt')  # Python 3.12+ 推荐 scrypt</p><div class="aritcle_card flexRow artxards">
											<div class="artcardd flexRow">
												<a class="aritcle_card_img" rel="nofollow" href="/xiazai/gongju/2783" title="Flask 3.0.2"><img
														src="https://img.php.cn/upload/manual/001/221/864/6aa8d671dac1e834.png" alt="Flask 3.0.2" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
												<div class="aritcle_card_info flexColumn">
													<a rel="nofollow" href="/xiazai/gongju/2783" title="Flask 3.0.2" class="overflowclass">Flask 3.0.2</a>
													<p class="overflowclass">Flask 3.0.2 是 Flask 的官方历史稳定版本,下载地址使用 PyPI wheel 包直链,适合指定版本安装和项目环境复现。</p>
												</div>
												<a rel="nofollow" href="/xiazai/gongju/2783" title="Flask 3.0.2" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
												</a>
											</div>
										</div><h1>登录时验证</h1><p>if check_password_hash(user.hashed_password, form.password.data):
login_user(user)
</p>

注意:method='pbkdf2:sha256' 兼容性更好,但 scrypt 抗 GPU 暴力更强;别硬编码 salt,generate_password_hash() 已自动处理;数据库字段类型要设为 Text 或足够长的 String(200),因为哈希值很长。

注册接口如何防止机器人批量注册?

最轻量有效的是服务端校验验证码(CAPTCHA),别只靠前端 JS 隐藏字段或时间戳——这些对脚本毫无约束力。

推荐用 flask-wtf + RecaptchaField(v2 invisible):

  • 注册表单继承 FlaskForm,字段里加 recaptcha = RecaptchaField()
  • 配置 RECAPTCHA_PUBLIC_KEYRECAPTCHA_PRIVATE_KEY
  • 提交时 form.validate_on_submit() 会自动调用 Google API 校验,失败则 form.errors 包含 'recaptcha' 错误

如果不想引入第三方,至少加简单服务端校验:比如注册请求需携带 X-Requested-With: XMLHttpRequest 头(防基础爬虫),或限制同一 IP 1 小时内最多 3 次注册请求(用 redis 计数)。

为什么登录后 current_user 总是 AnonymousUserMixin

常见原因有四个,按出现频率排序:

  • user_loader 回调函数没注册或抛异常:必须用 @login_manager.user_loader 装饰一个函数,该函数接收 user_id 并返回用户对象(不能返回 None,否则视为登出)
  • 用户模型的 get_id() 方法返回了非字符串值(比如整数 ID):必须显式 return str(self.id)
  • 登录时传给 login_user() 的不是模型实例,而是字典或元组(比如 login_user({'id': 1})
  • 使用了 session.permanent = True 但没设 app.secret_key:Flask 会静默丢弃 session,导致每次请求都新建匿名用户

调试技巧:在 user_loader 函数开头加 print(f"Loading user {user_id}"),看它是否被调用;再检查 session 字典里是否有 '_user_id' 键——没有就说明 login_user() 根本没成功执行。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
flask框架如何搭建
flask框架如何搭建

搭建步骤:1、安装Python和Pip;2、创建虚拟环境;3、安装Flask;4、创建Flask应用;5、运行应用;6、访问应用。想了解更多flask框架的相关内容,可以阅读本专题下面的文章。

2024.06.27

2795

8

Python Flask框架
Python Flask框架

本专题专注于 Python 轻量级 Web 框架 Flask 的学习与实战,内容涵盖路由与视图、模板渲染、表单处理、数据库集成、用户认证以及RESTful API 开发。通过博客系统、任务管理工具与微服务接口等项目实战,帮助学员掌握 Flask 在快速构建小型到中型 Web 应用中的核心技能。

2025.08.25

4144

10

Python Flask Web框架与API开发
Python Flask Web框架与API开发

本专题系统介绍 Python Flask Web框架的基础与进阶应用,包括Flask路由、请求与响应、模板渲染、表单处理、安全性加固、数据库集成(SQLAlchemy)、以及使用Flask构建 RESTful API 服务。通过多个实战项目,帮助学习者掌握使用 Flask 开发高效、可扩展的 Web 应用与 API。

2025.12.15

256

16

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

2026.09.16

160

9

ai生成视频的工具免费版合集
ai生成视频的工具免费版合集

本专题汇总了当前免费AI生成视频工具的排行榜与推荐清单,涵盖seko、讯飞智作、AniShort及剧云、Lovart等多模型集成平台。同时整理了各工具的免费额度、输出时长、水印政策及适用场景差异,助您快速选择合适工具开启AI视频创作。

2026.09.16

60

10

Pandas时间序列分析与可视化报表
Pandas时间序列分析与可视化报表

本专题整理Pandas日期转换、时间索引、重采样、滚动窗口、时区处理、plot绘图、Styler表格样式和报表输出方法。

2026.09.16

60

23

Pandas数据筛选索引与清洗处理
Pandas数据筛选索引与清洗处理

本专题整理Pandas中的loc、iloc、条件筛选、query查询、缺失值处理、重复值删除、类型转换和字符串列清洗方法。

2026.09.16

40

25

Pandas数据读取导入与文件导出处理
Pandas数据读取导入与文件导出处理

本专题整理Pandas读取CSV、Excel、JSON、SQL、Parquet等文件的方法,以及to_csv、to_excel、to_sql和to_parquet等常用数据导出流程。

2026.09.16

40

27

GDB怎么设置断点
GDB怎么设置断点

本专题介绍GDB按照函数名、源代码行号和文件位置设置断点的方法,详细说明run、continue、next、step等命令的配合使用,帮助定位程序崩溃、逻辑异常及代码未按预期执行的问题。

2026.09.11

360

28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Flask-Migrate数据库迁移文档
Flask-Migrate数据库迁移文档

共0课时 | 0人学习

Flask官方快速入门文档
Flask官方快速入门文档

共0课时 | 0人学习