Как я могу аутентифицировать пользователя на основе правильных/неправильных учетных данных, но игнорировать его состояние "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')