В моем проекте я реализую систему входа в систему, где пользователь может войти в систему, используя свое имя пользователя или свою электронную почту. Я в основном пытаюсь выяснить, вставлена ли электронная почта пользователя в поле формы «usernameOrEmail» или это имя пользователя введено в поле «usernameOrEmail». Затем я регистрирую их, если пользователь найден.
Вот мой код:
def login(request):
context = {}
if request.method == "POST":
isFound = ""
form = LoginForm(request.POST)
if form.is_valid():
try:
user = User.objects.get(username=form.cleaned_data.get("usernameOrEmail"))
isFound = "usernameFound"
except User.DoesNotExist:
try:
user = User.objects.get(email=form.cleaned_data.get("usernameOrEmail"))
isFound = "emailFound"
except User.DoesNotExist:
isFound = "nothingFound"
if isFound == "usernameFound":
print("USERNAME FOUND!")
user = auth.authenticate(username=form.cleaned_data.get("usernameOrEmail"), password=form.cleaned_data.get("password"))
if user is not None:
auth.login(request, user)
return redirect('home')
else:
context["error"] = "Oops, username/email or password provided is invalid"
elif isFound == "emailFound":
print("EMAIL FOUND")
user = auth.authenticate(email=form.cleaned_data.get("usernameOrEmail"), password=form.cleaned_data.get("password"))
if user is not None:
print("YES")
auth.login(request, user)
return redirect('home')
else:
print("NO")
context["error"] = "Oops, username/email or password provided is invalid"
else:
context["error"] = "Oops, username/email or password provided is invalid"
else:
context["error"] = "Please enter valid form data"
else:
form = LoginForm()
Странно, терминал возвращает оператор печати "EMAIL FOUND", означающий, что электронная почта пользователя был найден, однако оператор печати «НЕТ» также печатается, и в шаблоне возвращается сообщение «Упс, имя пользователя / адрес электронной почты или пароль неверен».
Другая странная вещь заключается в том, что эта система работает для имени пользователя user, то есть когда я ввожу имя пользователя user в поле «usernameOrEmail» и ввожу правильный пароль, пользователь входит в систему. Кто-нибудь знает проблему? спасибо.