Как я могу аутентифицировать пользователя на основе правильных/неправильных учетных данных, но игнорировать его состояние "is_active", если я хочу обрабатывать его отдельно?

В настоящее время метод django по умолчанию auth.authenticate возвращает None, если учетные данные верны, но user.is_active ложны.

Это означает, что пользователи, которые правильно ввели свои учетные данные, но не подтвердили свою учетную запись/электронную почту, получат такое же сообщение об ошибке, как и пользователи, которые неправильно ввели свои учетные данные. Я хочу предоставить пользователям сообщение об ошибке для крайнего случая, когда они ввели правильные учетные данные, но не активировали свой аккаунт через проверку электронной почты и, таким образом, user.is_active=False.

Мой вопрос в том, как мне реализовать это безопасно и эффективно?

views.py:

...
from django.contrib.auth import authenticate


class LoginView(View):
    def get(self, request):
        return render(request, 'accounts/login.html')
    
    def post(self, request):
        username = request.POST['username']
        password = request.POST['password']

        if username and password:
            user = auth.authenticate(username=username, password=password)

            if user:
                if user.is_active:
                    auth.login(request, user)
                    return redirect('accounts:home')
                else:
                    uidb64 = Base64.get_uidb64(user)
                    message = format_html("Please check your email for a verification link, or <a href='{}'>click here to request a new one.</a>", reverse('accounts:verify', kwargs={'uidb64':uidb64}))
                    messages.error(request, message)
            else:
                messages.error(request, 'Invalid account credentials. Please try again.')
            return render(request, 'accounts/login.html')

        return render(request, 'accounts/login.html')
Вернуться на верх