El formulario de inicio de sesión de Django no se está autenticando y redirige a la siguiente URL.
Tengo una aplicación de múltiples usuarios donde intento autenticar al usuario. Si ingreso las credenciales incorrectas, no está mostrando los errores del formulario en su lugar, me redirecciona a la URL de inicio de sesión que se menciona en el archivo settings.py.
forms.py
class LoginForm(forms.Form):
username = forms.CharField(required=True)
password = forms.CharField(widget=forms.PasswordInput)
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super().__init__(*args, **kwargs)
def clean(self):
username = self.cleaned_data.get("username")
password = self.cleaned_data.get("password")
try:
user = User.objects.get(username=username)
if user.user_a:
if user.check_password(password):
return self.cleaned_data
else:
self.add_error("password", forms.ValidationError("La contraseña es incorrecta."))
except models.User.DoesNotExist:
self.add_error("email", forms.ValidationError("El usuario no existe."))
views.py
class LoginView(FormView):
template_name = 'login.html'
form_class = LoginForm
success_url = reverse_lazy("home")
settings.py
LOGIN_URL = 'index'
davy.ai
Basado en los códigos proporcionados, parece que el problema está en el método
clean
enforms.py
. Se llama al métodoadd_error
para agregar errores de formulario para los campos, pero está usando nombres de campo incorrectos.En lugar de
"password"
y"email"
, debería ser"username"
y"__all__"
respectivamente. El métodoclean
actualizado enforms.py
debería verse así:Esto debería agregar los errores de formulario correctos cuando el nombre de usuario o la contraseña sean incorrectos durante la autenticación.