Autenticar usuário usando email e senha
Eu tenho um formulário que permite apenas que os usuários façam login por meio do nome de usuário. Decidi apenas permitir que o usuário faça o login via e-mail em vez do nome de usuário.
Em primeiro lugar, isso não é uma duplicação de qualquer questão relacionada ao registro por email, porque no meu cenário, eu valido e autentico o usuário emforms.py
antes que ele prossiga para o login final em views, isso me dá a chance de gerar um erro para senhas de login incorretas, etc.
A questão que estou enfrentando é que eu modifiquei meuforms.py
para gerar um erro se o e-mail não existir que funciona, mas não permitiria que o usuário fizesse login via 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})
Este é o meu código original, que permite apenas que os usuários façam login por meio do nome de usuário
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
Este é o meu código modificado, que permite apenas que os usuários façam login por email. Eu pensei muito sobre como eu faria, mas esta é a melhor ideia que eu criei. Desculpe, é um pouco confuso. O problema é que não permitiria o login do usuário. Eu não entendo porque.
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
Alguém por favor pode me ajudar?