Django if user.is_authenticated не работает, но пользователь входит в систему

Моя проблема в том, что операция входа выполняется правильно и сессия устанавливается правильно, но user.is_authenticated не работает. Дело в том, что он работает, когда я вхожу через админку, но не так, что я могу сделать, чтобы исправить это?

session set true image

мой код :

views.py

class LoginView(View):
    def get(self, request):
        login_form = LoginForm()
        context = {
            'login_form': login_form
        }
        return render(request, 'account/login.html', context)

    def post(self, request: HttpRequest):
        login_form = LoginForm(request.POST)
        if login_form.is_valid():
            user_email = login_form.cleaned_data.get('email')
            user_password = login_form.cleaned_data.get('password')
            user: User = User.objects.filter(email__iexact=user_email).first()
            if user is not None:
                check_password = user.check_password(user_password)
                if check_password:
                    login(request, user)
                    return redirect('home')
                else:
                    login_form.add_error('password', 'password is not correct !')
            else:
                login_form.add_error('email', 'email dose not exists !')
        context = {
            'login_form': login_form
        }
        return render(request, 'account/login.html', context)

header_component.html

<div class="navbar__list">
    <ul class="navbar__links">
        {% for link in links %}
            <li class="navbar__link"><a href="{{ link.url }}">{{ link.name|capfirst }}</a></li>
        {% endfor %}
        {% if user.is_authenticated %}
            <li class="navbar__link"><a href="#">welcome</a></li>
            <li class="navbar__link"><a href="{% url 'logout' %}">Log out</a></li>
        {% else %}
            <li class="navbar__link"><a href="{% url 'login' %}">Login</a></li>
            <li class="navbar__link"><a href="{% url 'register' %}">Register</a></li>
        {% endif %}
    </ul>
</div>

{% if user.is_authenticated %} является устаревшим.

Используйте это вместо:

{% if request.user.is_authenticated %}
    # Do something for authenticated users.
    ...
{% else %}
    # Do something for anonymous users.
    ...

Согласно документации:

Django использует sessions и middleware для подключения системы аутентификации в объекты запросов. Они обеспечивают request.user атрибут каждого запроса, который представляет текущего пользователя. Если текущий пользователь не вошел в систему, этот атрибут будет установлен в экземпляр экземпляр AnonymousUser, иначе это будет экземпляр User. Вы можете различать их с помощью is_authenticated, как показано выше.

Редактирование: Добавить пояснения к документации.

Я пишу это для друзей, у которых есть эта проблема

Решением этой проблемы является то, что пользователь должен быть is_active равен True для выполнения операции входа, иначе секция

request.user.is_authenticated

Иначе он не работает и не заходит в пользователя

Вернуться на верх