【问题标题】:Django is.authenticated always returning trueDjango is.authenticated 总是返回 true
【发布时间】:2026-01-07 12:00:01
【问题描述】:

我正在使用 Django 身份验证系统,并希望在用户登录网站后创建注销按钮。但是 user.is_authenticated 不起作用,即使在登录页面上也会显示注销按钮。有人可以帮我理解我错过了什么吗? 下面是我的views.py 和模板代码-

查看:

def user_login(request):

    form=LoginForm()

    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')

        user = authenticate(username=username, password=password)

        if user:
            print("came here")
            if user.is_active:
                login(request,user)
                return redirect('valid')
        else:
            return HttpResponse('username or password not correct')

    else:

        return render(request, 'restui/login.html',{'form':form})

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>REST API Framework</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
</head>
<body>
    <nav class="navbar navbar-dark bg-primary">

                <a href="#" class="navbar-brand" style="font-family: 'Lato', sans-serif;">REST API Testing Framework</a>

                {% if request.user.is_authenticated %}

                    <button class="btn btn-light" type="submit">Logout</button>

                {% endif %}
    </nav>
    <br>
    <br>
    <br>
    <nav class="navbar fixed-bottom">
        <div class="container">
             <div class="navbar-header">
                <a href="#" class="navbar-brand"></a>
            </div>

            <ul class="nav navbar-nav">
                <li>
                    <a href="#"><img src="infosys-logo.jpg" style="max-height:100px; max-width:90%; right:1px; "></a>
                </li>
            </ul>
        </div>
    </nav>
    {% block body_block %}
    <div class="container">

        <form method="post">
          <div class="form-group">

              {{ form.username.label }} {{ form.username }}

          </div>
          <div class="form-group">
              {{ form.password.label }} {{ form.password }}

          </div>
            <br>
            {% csrf_token %}
          <button type="submit" class="btn btn-primary">Submit</button>
            <small id="emailHelp" class="form-text text-muted">Login issues? Please contact solutions team to get access.</small>

        </form>

         </div>
    {% endblock %}

</body>
</html>

【问题讨论】:

    标签: django


    【解决方案1】:

    试试这个{% if user.is_authenticated %}

    这是我的代码

    {% if user.is_authenticated %}
     <li><a href="{% url 'logout' %}"><i class="fa fa-sign-out pull-right"></i> Log Out</a></li>
    
     {% else %} <a href="{% url 'login' %}" class="fa fa-sign-out pull-right"> LogIn </a>
    
    {% endif %}
    

    【讨论】:

    • 试过了,结果一样:(
    【解决方案2】:

    好吧,即使您在登录页面上,您的用户仍然是经过身份验证的。您可以检查用户是否经过身份验证,然后重定向到另一个页面,这样登录的用户就看不到登录页面。

    def user_login(request):
    
        form=LoginForm()
        if request.user.is_authenticated:
            print("Already logged in")
            return redirect('valid')
    
        if request.method == "POST":
            username = request.POST.get('username')
            password = request.POST.get('password')
    
            user = authenticate(username=username, password=password)
    
            if user:
                print("came here")
                if user.is_active:
                    login(request,user)
                    return redirect('valid')
            else:
                return HttpResponse('username or password not correct')
    
        else:
    
            return render(request, 'restui/login.html',{'form':form})
    
    

    【讨论】:

    • 感谢您的建议!用户实际上一直在登录。我只是为注销编写了额外的代码,一旦我注销,登录页面上就不再出现该按钮。再次感谢!