Django проверяет user.is_authenticated перед UserCreationForm, чтобы пользователь не зарегистрировался дважды
В Django я пытаюсь предотвратить повторную регистрацию (sign up) уже существующего пользователя. В моем случае пользователь может зарегистрироваться с помощью формы. Мой подход заключается в проверке views.py
, если пользователь уже существует, путем предварительной проверки is_authenticated
. Если пользователь не существует, то записи формы будут обработаны, и пользователь будет создан.
Проблема: если пользователь уже существует, я ожидаю, что условие request.user.is_authenticated
будет True и браузер будет перенаправлен на home. Вместо этого оценка продолжает обрабатывать форму, выбрасывая (конечно же) следующую ошибку:
Значение исключения: дублирующее значение ключа нарушает уникальное ограничение "auth_user_username_key" ПОДРОБНАЯ ИНФОРМАЦИЯ: Ключ (имя пользователя)=(john.doe) уже существует.
Это образец моего views.py
:
def register_user(request):
if request.method == "POST":
if request.user.is_authenticated:
messages.error(request, ('User already exists.'))
return redirect('home')
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
... # do more stuff
Что я упускаю?
Вы пробовали request.user.is_anonymous
?
Если пользователь уже вошел в систему, то is_authenticated
будет выдавать True, а False - если пользователь не вошел в систему.
Я предполагаю, что вы пытаетесь зарегистрироваться/зарегистрироваться без активной сессии, тогда первое внутреннее if request.user.is_authenticated
оценивается как False и не используется, поэтому оно переходит ко второму внутреннему if и затем возникает ошибка базы данных, потому что вы пытались использовать то же самое имя пользователя.