|
|
|
|
@ -338,29 +338,52 @@ class EmailOrUsernameAuthenticationForm(AuthenticationForm): |
|
|
|
|
username = self.cleaned_data.get('username') |
|
|
|
|
password = self.cleaned_data.get('password') |
|
|
|
|
|
|
|
|
|
print(f"Login attempt with username/email: {username}") # Debug print |
|
|
|
|
logger.info(f"Login attempt with username/email: {username}") |
|
|
|
|
|
|
|
|
|
if username and password: |
|
|
|
|
# Check if user exists first (either by username or email) |
|
|
|
|
user_exists = None |
|
|
|
|
try: |
|
|
|
|
# Try to find user by username first |
|
|
|
|
user_exists = CustomUser.objects.get(username__iexact=username) |
|
|
|
|
except CustomUser.DoesNotExist: |
|
|
|
|
# Try to find user by email |
|
|
|
|
try: |
|
|
|
|
user_exists = CustomUser.objects.get(email__iexact=username) |
|
|
|
|
except CustomUser.DoesNotExist: |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
# If user exists but is inactive, provide specific feedback |
|
|
|
|
if user_exists and not user_exists.is_active: |
|
|
|
|
# Store the inactive user in session for template use |
|
|
|
|
if hasattr(self, 'request') and self.request.session: |
|
|
|
|
self.request.session['inactive_user_email'] = user_exists.email |
|
|
|
|
self.request.session['inactive_user_id'] = str(user_exists.id) |
|
|
|
|
|
|
|
|
|
raise forms.ValidationError( |
|
|
|
|
"Votre compte n'est pas encore activé. Veuillez cliquer sur le lien d'activation envoyé à votre adresse e-mail.", |
|
|
|
|
code='inactive_account' |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
# Try regular authentication |
|
|
|
|
self.user_cache = authenticate( |
|
|
|
|
self.request, |
|
|
|
|
username=username, |
|
|
|
|
password=password |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
print(f"Authentication result: {self.user_cache}") # Debug print |
|
|
|
|
logger.info(f"Authentication result: {self.user_cache}") |
|
|
|
|
|
|
|
|
|
if self.user_cache is None: |
|
|
|
|
print("Authentication failed") # Debug print |
|
|
|
|
logger.warning("Authentication failed") |
|
|
|
|
raise forms.ValidationError( |
|
|
|
|
"Identifiant/E-mail ou mot de passe incorrect. Les champs sont sensibles à la casse.", |
|
|
|
|
code='invalid_login' |
|
|
|
|
) |
|
|
|
|
else: |
|
|
|
|
print(f"Authentication successful for user: {self.user_cache}") # Debug print |
|
|
|
|
logger.info(f"Authentication successful for user: {self.user_cache}") |
|
|
|
|
# Clear any inactive user session data on successful login |
|
|
|
|
if hasattr(self, 'request') and self.request.session: |
|
|
|
|
self.request.session.pop('inactive_user_email', None) |
|
|
|
|
self.request.session.pop('inactive_user_id', None) |
|
|
|
|
self.confirm_login_allowed(self.user_cache) |
|
|
|
|
|
|
|
|
|
return self.cleaned_data |
|
|
|
|
|