django 默认在用户密码变更后自动清除其会话,导致用户登出;解决方法是调用 `update_session_auth_hash()` 保留当前登录状态。
在 Django 中,当用户密码被修改(例如通过自定义视图 psswdReset),框架出于安全考虑会主动使所有基于旧密码哈希的会话失效——这是默认行为,并非 Bug。其原理在于:Django 将用户密码哈希值嵌入 session 数据的认证签名中(通过 SESSION_AUTH_HASH 机制)。一旦 user.password 字段更新,request.user.get_session_auth_hash() 返回值随之改变,而现有 session 中存储的旧 auth hash 不再匹配,中间件(AuthenticationMiddleware)检测到不一致后,便将 request.user 重置为 AnonymousUser,即“会话被冲刷”。
你当前的视图存在两个关键问题:
✅ 正确做法是使用 set_password() 方法(它会自动哈希并触发相关逻辑),并在保存后立即调用 update_session_auth_hash(request):
from django.contrib.auth import update_session_auth_hash from django.contrib import messages def psswdReset(request):if request.method == 'POST': new_psswd = request.POST.get('new_psswd') psswd = request.POST.get('psswd') # 验证旧密码(推荐使用 check_password) if not check_password(psswd, request.user.password): messages.error(request, 'Current password is incorrect.') return render(request, 'User/userPsswdReset.html') # ✅ 安全设置新密码(自动哈希 + 触发信号) request.user.set_password(new_psswd) request.user.save() # ✅ 关键:更新 session 的认证哈希,保持登录态 update_session_auth_hash(request, request.user) messages.success(request, 'Password changed successfully!') return render(request, 'User/userPsswdReset.html') return render(request, 'User/userPsswdReset.html')
⚠️ 注意事项:
总结:密码变更触发会话失效是 Django 的内置安全防护,而非异常。只需在修改密码后显式调用 update_session_auth_hash(request, user),即可无缝延续用户会话,兼顾安全性与用户体验。
# word
# html
# go
# session
# 解决方法
# django
# 安全防护
# 中间件
相关文章:
济南网站建设制作公司,室内设计网站一般都有哪些功能?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
PHP正则匹配日期和时间(时间戳转换)的实例代码
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
PHP 500报错的快速解决方法
常州自助建站费用包含哪些项目?
建站之星24小时客服电话如何获取?
北京的网站制作公司有哪些,哪个视频网站最好?
如何快速搭建安全的FTP站点?
魔方云NAT建站如何实现端口转发?
电商网站制作公司有哪些,1688网是什么意思?
兔展官网 在线制作,怎样制作微信请帖?
如何在阿里云通过域名搭建网站?
如何用虚拟主机快速搭建网站?详细步骤解析
测试制作网站有哪些,测试性取向的权威测试或者网站?
建站之星安装需要哪些步骤及注意事项?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
C++如何使用std::optional?(处理可选值)
股票网站制作软件,网上股票怎么开户?
已有域名和空间如何快速搭建网站?
建站主机无法访问?如何排查域名与服务器问题
如何通过NAT技术实现内网高效建站?
家庭建站与云服务器建站,如何选择更优?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
如何通过虚拟主机快速搭建个人网站?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
清除minerd进程的简单方法
建站之星在线客服如何快速接入解答?
Java解压缩zip - 解压缩多个文件或文件夹实例
企业微网站怎么做,公司网站和公众号有什么区别?
官网网站制作腾讯审核要多久,联想路由器newifi官网
开心动漫网站制作软件下载,十分开心动画为何停播?
如何选择美橙互联多站合一建站方案?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
如何选择可靠的免备案建站服务器?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
如何快速搭建高效WAP手机网站吸引移动用户?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
宝塔建站教程:一键部署配置流程与SEO优化实战指南
,在苏州找工作,上哪个网站比较好?
如何快速搭建支持数据库操作的智能建站平台?
如何通过VPS搭建网站快速盈利?
如何挑选最适合建站的高性能VPS主机?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
常州企业网站制作公司,全国继续教育网怎么登录?
如何注册花生壳免费域名并搭建个人网站?
实例解析Array和String方法
北京企业网站设计制作公司,北京铁路集团官方网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。