Аутентифицировать пользователя, используя электронную почту и пароль
У меня есть форма, которая позволяет пользователям входить только через имя пользователя. Я решил разрешить пользователю вход только по электронной почте вместо имени пользователя.
Во-первых, это не дублирование любого вопроса, связанного с регистрацией по электронной почте, потому что в моем сценарии я проверяю и аутентифицирую пользователя вforms.py
прежде чем он перейдет к окончательному входу в систему в представлениях, так что это даст мне возможность вызвать ошибку для неправильных паролей входа и т. д.
Проблема, с которой я сталкиваюсь - я изменил свойforms.py
вызвать ошибку, если электронная почта не существует, которая работает, но это не позволит пользователю войти через его электронную почту.
def LoginRequest(request):
form = LoginForm(request.POST or None)
if request.POST and form.is_valid():
user = form.login(request)
if user:
login(request, user)
return HttpResponseRedirect(reverse('Hello'))
return render(request, 'login.html',{'form': form})
Это мой оригинальный код, который позволяет пользователям входить только через имя пользователя
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(
widget=forms.PasswordInput(render_value=False)
)
def clean(self):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
user = authenticate(username=username, password=password)
if not user or not user.is_active:
raise forms.ValidationError("Sorry, that login was invalid. Please try again.")
return self.cleaned_data
def login(self, request):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
user = authenticate(username=username, password=password)
return user
Это мой модифицированный код, который позволяет пользователям входить только по электронной почте. Я много думал о том, как я это сделаю, но это лучшая идея, которую я придумал. Извините, это немного сбивает с толку. Проблема в том, что он не позволит пользователю войти в систему. Я не понимаю почему.
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(
widget=forms.PasswordInput(render_value=False)
)
def clean(self):
user = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
if User.objects.filter(email=user).exists():
password = self.cleaned_data.get('password')
user = authenticate(username=user.username, password=password)
if not user or not user.is_active:
raise forms.ValidationError("Sorry, that login was invalid. Please try again.")
return self.cleaned_data
def login(self, request):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
user = authenticate(username=username, password=password)
return user
Может кто-нибудь, пожалуйста, помогите мне?