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
相关产品推荐
相关产品推荐

