Authentifizieren Sie den Benutzer mit E-Mail und Passwort

Ich habe ein Formular, mit dem sich Benutzer nur über den Benutzernamen anmelden können. Ich habe beschlossen, dem Benutzer nur die Anmeldung per E-Mail anstelle des Benutzernamens zu erlauben.

Erstens ist dies keine Verdoppelung von Fragen zur Anmeldung per E-Mail, da ich in meinem Szenario den Benutzer in validiere und authentifiziereforms.py bevor er zum endgültigen Login in Ansichten übergeht, habe ich die Möglichkeit, einen Fehler wegen falscher Login-Passwörter etc. auszulösen.

Das Problem, mit dem ich konfrontiert bin, ist, dass ich meine geändert habeforms.py einen Fehler auslösen, wenn die E-Mail nicht existiert, was funktioniert, aber der Benutzer sich nicht über seine E-Mail anmelden kann.

 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})

Dies ist mein ursprünglicher Code, mit dem sich Benutzer nur über den Benutzernamen anmelden können

 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

Dies ist mein geänderter Code, mit dem sich Benutzer nur per E-Mail anmelden können. Ich habe viel darüber nachgedacht, wie ich es machen würde, aber das ist die beste Idee, die ich mir ausgedacht habe. Entschuldigung, es ist ein bisschen verwirrend. Das Problem ist, dass der Benutzer sich nicht anmelden kann. Ich verstehe nicht warum.

 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

Kann mir bitte jemand helfen?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage