全网整合营销服务商

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

免费咨询热线: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  # 安全防护  # 推荐使用  # 自定义  # 修改密码  # 这是  # 这一  # 已被  # 不应  # 你认为  # 后将  # 但对 


相关文章: 长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  如何在宝塔面板中修改默认建站目录?  宝塔建站无法访问?如何排查配置与端口问题?  如何配置支付宝与微信支付功能?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  建站与域名管理如何高效结合?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  如何通过FTP空间快速搭建安全高效网站?  如何快速搭建安全的FTP站点?  如何快速生成高效建站系统源代码?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  浅谈Javascript中的Label语句  如何在阿里云域名上完成建站全流程?  如何通过IIS搭建网站并配置访问权限?  详解jQuery中基本的动画方法  如何在阿里云ECS服务器部署织梦CMS网站?  如何获取PHP WAP自助建站系统源码?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何快速生成ASP一键建站模板并优化安全性?  代购小票制作网站有哪些,购物小票的简要说明?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  网站制作服务平台,有什么网站可以发布本地服务信息?  如何用低价快速搭建高质量网站?  简历在线制作网站免费版,如何创建个人简历?  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  建站之星后台密码遗忘?如何快速找回?  北京网站制作的公司有哪些,北京白云观官方网站?  如何用y主机助手快速搭建网站?  ,购物网站怎么盈利呢?  攀枝花网站建设,攀枝花营业执照网上怎么年审?  如何高效利用亚马逊云主机搭建企业网站?  建站主机核心功能解析:服务器选择与网站搭建流程指南  网站微信制作软件,如何制作微信链接?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  建站主机是否等同于虚拟主机?  存储型VPS适合搭建中小型网站吗?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  建站之星安装后如何自定义网站颜色与字体?  如何挑选优质建站一级代理提升网站排名?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  济南网站制作的价格,历城一职专官方网站?  家庭服务器如何搭建个人网站?  完全自定义免费建站平台:主题模板在线生成一站式服务  如何破解联通资金短缺导致的基站建设难题?  湖北网站制作公司有哪些,湖北清能集团官网? 

您的项目需求

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