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

Django登录功能正常但私密页面可直接访问,@login_required无效如何解决?

问题描述

我的网站登录功能可以正常使用,但未登录用户仍能通过直接输入URL访问私密页面,这一安全漏洞让我非常担心。我之前找ChatGPT求助,它建议在视图函数前添加@login_required装饰器,但这个方法没起作用。以下是我的相关代码:

def login_view(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return HttpResponseRedirect('/Händlerpage/  # 此处缺少闭合括号
        else:
            return render(request, 'login.html', {'error_message': 'Ungültiger Login'})
    else:
        return render(request, 'login.html')

@login_required
def Händlerpage(request):
    return render(request,'Händlerpage.html')
解决办法
  • 修复代码语法错误
    登录视图中的return HttpResponseRedirect('/Händlerpage/缺少闭合括号,这会导致登录后的重定向逻辑异常,用户可能没有完成完整的登录会话建立。修正为:

    return HttpResponseRedirect('/Händlerpage/')
    
  • 配置登录跳转URL
    在项目的settings.py中添加登录页面的URL路径,确保@login_required装饰器知道未登录用户该跳转到哪里:

    LOGIN_URL = '/login/'  # 替换为你的登录视图实际URL
    
  • 检查中间件配置
    确保settings.py的MIDDLEWARE中包含会话和认证相关中间件,这是Django处理用户认证的基础:

    MIDDLEWARE = [
        # ...其他中间件
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        # ...其他中间件
    ]
    
  • 验证路由与视图的关联
    确认Händlerpage的URL路由确实指向了带@login_required装饰器的视图函数,没有重复路由或错误映射到未受保护的视图。

  • 调试用户认证状态
    可以在私密视图中添加调试代码,确认用户是否真的被认证:

    @login_required
    def Händlerpage(request):
        print(request.user.is_authenticated)  # 控制台查看输出是否为True
        return render(request,'Händlerpage.html')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 08:25:15