Uwierzytelnij użytkownika za pomocą adresu e-mail i hasła
Mam formularz, który pozwala tylko użytkownikom na logowanie się za pomocą nazwy użytkownika. Postanowiłem zezwolić tylko użytkownikowi na logowanie się przez e-mail zamiast nazwy użytkownika.
Po pierwsze, nie jest to powielanie jakichkolwiek pytań związanych z logowaniem przez e-mail, ponieważ w moim scenariuszu sprawdzam i uwierzytelniam użytkownika wforms.py
zanim przejdzie do ostatecznego logowania w widokach, co da mi szansę na zgłoszenie błędu w przypadku nieprawidłowych haseł logowania itp.
Problemem, przed którym stoję, jest zmodyfikowanie mojegoforms.py
aby zgłosić błąd, jeśli wiadomość e-mail nie istnieje, która działa, ale nie pozwoliłaby użytkownikowi zalogować się przez jego e-mail.
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})
To jest mój oryginalny kod, który pozwala użytkownikom na logowanie się tylko przez nazwę użytkownika
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
To jest mój zmodyfikowany kod, który pozwala użytkownikom na logowanie się przez e-mail. Dużo myślałem o tym, jak to zrobię, ale jest to najlepszy pomysł, jaki wymyśliłem. Przepraszam, to trochę mylące. Problem polega na tym, że nie pozwoliłby użytkownikowi zalogować się. Nie rozumiem dlaczego.
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
Czy ktoś może mi pomóc?