Django 登录不起作用,我该如何解决?

问题描述 投票:0回答:2

我的网站有登录功能,但不幸的是,即使没有登录,仍然可以通过输入 URL 访问私人页面。我很担心这个安全漏洞,想知道如何防止用户没有先登录就访问私人页面。你能就如何解决这个问题提供任何建议或指导吗?

我向 ChatGPT 寻求帮助。它建议将“login_required”放在“def”之前,但它不起作用。


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')



django authentication web private
2个回答
0
投票

在您的模板中,尝试使用:

{% if user.is_authenticated %} <div></div> {% endif %}

对于每个未验证(=未登录)的用户,

<div></div>
都会消失


顺便说一句,您可以删除“@login_required”。

根据个人经验,使用 ChatGPT for Django 90% 的时间都行不通。


0
投票

如果你想像这样使用装饰器,你必须通过登录网址:

@login_required(login_url="/login_view/")
def Händlerpage(request):
  return render(request,'Händlerpage.html')

如果用户未登录系统,这将阻止用户访问此页面,并且他们将被重定向到登录页面。参考Doc

您可以在

LOGIN_URL
中定义
settings.py
的另一个选项,然后您可以 使用装饰器而不指定您之前尝试过的 url:

LOGIN_URL = "/login_view/"
© www.soinside.com 2019 - 2024. All rights reserved.