You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django实现科室与用户双重登录系统的方案咨询

Django 双层登录系统实现方案

标准落地路径

完全匹配当前需求的实现不需要修改Django原生auth框架核心逻辑,靠session分层存储+中间件拦截即可实现,逻辑清晰无额外依赖:

  • 拆分两层认证的session存储规则
    不要在第一层病区账号校验通过后就调用Django自带的login()方法写入正式登录态。单独在request.session里存独立的第一层校验标识,比如ward_auth_pass,字段内容存校验通过的病区ID、校验时间戳,给这个标识单独设有效期(比如30分钟无操作自动失效)。
    第一层登录视图参考逻辑:
    def ward_login_view(request):
        # 已通过第一层校验的直接跳转个人登录页
        if request.session.get('ward_auth_pass'):
            return redirect('personal_login')
        if request.method == "POST":
            form = WardLoginForm(request.POST)
            if form.is_valid():
                ward_id = form.cleaned_data['ward_id']
                input_pwd = form.cleaned_data['password']
                # 校验对应病区的通用账号密码
                if Ward.objects.filter(id=ward_id, common_pwd=input_pwd).exists():
                    request.session['ward_auth_pass'] = {
                        "ward_id": ward_id,
                        "verify_ts": timezone.now().timestamp()
                    }
                    return redirect('personal_login')
        else:
            form = WardLoginForm()
        return render(request, "ward_login.html", {"form": form})
    
  • 增加全局前置校验中间件
    写一个轻量中间件,拦截除病区登录页、静态资源路径之外的所有请求:首先检查session里有没有合法的ward_auth_pass标识,没有就直接重定向回病区登录页;如果已经通过第一层校验,再检查是否有Django原生auth记录的个人账号登录态,没有就跳转个人登录页。
    第二层个人账号登录时,除了校验护士个人的账号密码正确性,必须额外加一层校验:当前护士账号关联的病区ID,必须和ward_auth_pass里存的病区ID一致,避免跨病区登录绕过。校验全部通过后再调用login()写入正式个人登录态。
  • 配套退出/过期逻辑
    用户主动退出时直接清空全量session,跳回第一层登录页;如果第一层校验标识过期,就算个人登录态还在,也要同步清空个人登录态,强制回到第一层重新校验。

更优替代设计

原需求里的「病区共用通用账号」存在明显安全隐患,实际落地可以根据业务本质做优化,不改变核心使用流程但安全性提升很多:

  • 去掉静态共用密码,改设备绑定校验
    护士站的工作终端基本都是固定的,不需要额外记忆共用密码:给每个病区的工作终端做绑定,第一次激活时由护士长输入管理密码,把加密的设备标识存在浏览器本地存储里。用户打开系统选完病区,系统自动校验当前设备是否属于该病区绑定的合法设备,校验通过直接进个人登录页,既满足“必须在本病区范围内才能登录系统”的核心要求,又解决了共用密码容易泄露、轮转/离职人员知晓密码后存在访问风险的问题。
  • 如果必须保留密码环节,改用动态日更密码
    不要给病区设置长期固定的通用密码,由系统每天凌晨自动生成每个病区的当日通用密码,推送给当天的当班护士长,密码24小时自动失效,就算泄露影响范围也可控。
  • 所有操作日志、权限校验全部绑定个人账号
    第一层校验只做访问范围拦截,所有业务操作的权限判断、操作留痕必须绑定到第二层登录的个人护士账号,出现操作问题可以精准追溯到具体人,不要因为有第一层校验就放松个人层的权限管控。

内容的提问来源于stack exchange,提问作者IbbyR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 00:51:24