全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何在 Django 中修改用户密码后保持会话不丢失

django 默认会在用户密码变更后自动失效旧会话,导致用户登出;解决方法是调用 `update_session_auth_hash()` 保留当前登录状态。

在 Django 中,当用户密码被修改(例如通过自定义视图 psswdReset),框架出于安全考虑会主动使所有基于旧密码的会话失效——这是默认行为,并非 Bug。其原理在于:Django 的认证中间件会比对当前 session 中存储的哈希签名与用户 password 字段的哈希值。一旦 user.password 被直接更新(如 user.password = make_password(...)),而未同步更新 session 的认证标识,下次请求时 AuthenticationMiddleware 将检测到不一致,强制将 request.user 置为 AnonymousUser,即“会话被冲刷”。

您当前的代码存在两个关键问题:

  1. 未调用 update_session_auth_hash():这是最核心的修复点;
  2. 手动赋值 user.password 并保存:虽可行,但绕过了 Django 用户模型的安全更新逻辑,易遗漏信号或钩子。

✅ 正确做法如下(推荐使用 set_password() + update_session_auth_hash()):

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')

        # 验证原密码正确性
        if not request.user.check_password(psswd):
            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')

? 注意事项:

  • update_session_auth_hash(request, user) 必须在 user.save() 之后调用,且 user 必须是当前已认证的用户实例(通常为 request.user);
  • 不要使用 check_password(psswd, request.user.password) 手动比对——应直接调用 request.user.check_password(),它更安全且兼容自定义密码 hasher;
  • 若使用 CustomUser 模型,请确保其继承自 AbstractBaseUser 或 AbstractUser,并正确实现了 set_password() 方法;
  • 该机制仅影响当前用户的活跃会话,其他设备/浏览器的会话仍会被安全地注销(符合预期)。

? 总结:密码修改后会话丢失是 Django 的主动安全防护机制,而非缺陷。只需在保存新密码后调用 update_session_auth_hash(),即可在保障安全性的同时提供无缝的用户体验。


# word  # html  # go  # 浏览器  # session  # 解决方法  # django  # 安全防护  # 中间件 


相关文章: 建站之星图片链接生成指南:自助建站与智能设计教程  如何快速搭建个人网站并优化SEO?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  如何快速搭建高效简练网站?  如何用PHP快速搭建CMS系统?  名字制作网站免费,所有小说网站的名字?  Android自定义控件实现温度旋转按钮效果  寿县云建站:智能SEO优化与多行业模板快速上线指南  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  建站之星云端配置指南:模板选择与SEO优化一键生成  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  如何通过服务器快速搭建网站?完整步骤解析  建站之星伪静态规则如何正确配置?  建站主机如何选?性能与价格怎样平衡?  如何登录建站主机?访问步骤全解析  无锡营销型网站制作公司,无锡网选车牌流程?  Swift中循环语句中的转移语句 break 和 continue  建站之星2.7模板快速切换与批量管理功能操作指南  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  制作网站的基本流程,设计网站的软件是什么?  活动邀请函制作网站有哪些,活动邀请函文案?  如何选择靠谱的建站公司加盟品牌?  潮流网站制作头像软件下载,适合母子的网名有哪些?  建站之星如何实现五合一智能建站与营销推广?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  IOS倒计时设置UIButton标题title的抖动问题  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  SQL查询语句优化的实用方法总结  如何在建站主机中优化服务器配置?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  宝塔建站后网页无法访问如何解决?  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  制作销售网站教学视频,销售网站有哪些?  如何快速搭建二级域名独立网站?  开源网站制作软件,开源网站什么意思?  建站之星如何助力企业快速打造五合一网站?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  小建面朝正北,A点实际方位是否存在偏差?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  网站制作模板下载什么软件,ppt模板免费下载网站?  婚礼视频制作网站,学习*后期制作的网站有哪些?  建站主机类型有哪些?如何正确选型  完全自定义免费建站平台:主题模板在线生成一站式服务  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  如何在云服务器上快速搭建个人网站?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。