全网整合营销服务商

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

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

Django密码修改后会话失效的解决方案

django在用户密码更新后自动使当前会话失效,导致用户登出(变为匿名用户),这是出于安全默认行为;需调用`update_session_auth_hash()`保留登录状态。

在Django中,当用户密码被修改(例如通过自定义视图 psswdReset)时,框架会主动使当前会话失效——即用户立即被登出,request.user.is_anonymous 变为 True。这一机制是Django内置的安全防护措施,目的是防止密码被篡改后旧会话仍可继续访问敏感资源(如会话劫持或凭证泄露场景下的横向移动)。

但对用户体验而言,这往往不理想:用户刚成功修改密码,却立刻跳转到登录页,需重新输入凭证。解决方法非常明确:在密码保存后,立即调用 update_session_auth_hash(request, user),通知Django该用户的认证凭据已更新,但当前会话仍可信,应予以延续。

以下是修复后的视图代码(关键修改已加注释):

from django.contrib.auth import update_session_auth_hash
from django.contrib import messages
from django.contrib.auth.hashers import check_password, make_password
from django.shortcuts import render

def psswdReset(request):
    if request.method == 'POST':
        new_psswd = request.POST.get('new_psswd')
        psswd = request.POST.get('psswd')

        # 验证原密码正确性(推荐使用 request.user.check_password() 更简洁)
        if not request.user.check_password(psswd):
            messages.error(request, 'Current password is incorrect.')
            return render(request, 'User/userPsswdReset.html')

        # 更新密码(推荐使用 set_password() 而非直接赋值 password 字段)
        request.user.set_password(new_psswd)
        request.user.save()

        # ✅ 关键一步:保持当前会话有效,避免自动登出
        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')

? 注意事项与最佳实践:

  • ✅ 始终使用 user.set_password() 替代手动 user.password = make_password(...),它会自动处理哈希逻辑并标记密码字段为已修改;
  • ✅ 优先调用 request.user.check_password() 进行原密码校验,语义清晰且兼容自定义用户模型;
  • ✅ update_session_auth_hash() 必须在 user.save() 之后、响应返回之前调用,否则无效;
  • ⚠️ 切勿省略此调用——即使你认为“只是内部系统”,安全边界不应妥协;
  • ? 若使用 Django 内置 PasswordChangeForm,该函数已被 PasswordChangeView 自动集成,无需手动处理。

通过以上调整,用户在修改密码后将保持登录态,体验更流畅,同时完全符合Django的安全设计原则。


# word  # html  # go  # session  # 解决方法  # django  # 安全防护  # 推荐使用  # 自定义  # 修改密码  # 这是  # 这一  # 已被  # 不应  # 你认为  # 后将  # 但对 


相关文章: 如何在企业微信快速生成手机电脑官网?  青浦网站制作公司有哪些,苹果官网发货地是哪里?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  深圳网站制作平台,深圳市做网站好的公司有哪些?  如何自定义建站之星网站的导航菜单样式?  网站制作难吗安全吗,做一个网站需要多久时间?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  大连网站制作公司哪家好一点,大连买房网站哪个好?  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  如何使用Golang table-driven基准测试_多组数据测量函数效率  MySQL查询结果复制到新表的方法(更新、插入)  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  贸易公司网站制作流程,出口贸易网站设计怎么做?  c++ stringstream用法详解_c++字符串与数字转换利器  为什么Go需要go mod文件_Go go mod文件作用说明  建站主机功能解析:服务器选择与快速搭建指南  网站制作网站,深圳做网站哪家比较好?  如何彻底删除建站之星生成的Banner?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  如何续费美橙建站之星域名及服务?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  微信小程序 五星评分(包括半颗星评分)实例代码  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  如何在云主机上快速搭建网站?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  高端智能建站公司优选:品牌定制与SEO优化一站式服务  如何选择域名并搭建高效网站?  如何在IIS7上新建站点并设置安全权限?  建站主机解析:虚拟主机配置与服务器选择指南  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  建站之星安装失败:服务器环境不兼容?  青岛网站建设如何选择本地服务器?  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  三星网站视频制作教程下载,三星w23网页如何全屏?  自助网站制作软件,个人如何自助建网站?  我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  建站与域名管理如何高效结合?  如何在Golang中使用replace替换模块_指定本地或远程路径  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  如何快速搭建安全的FTP站点?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  视频网站制作教程,怎么样制作优酷网的小视频?  建站之星如何实现五合一智能建站与营销推广? 

您的项目需求

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