from django.contrib.auth import get_user_model from django.contrib.auth.backends import ModelBackend
UserModel = get_user_model()
class EmailAuthenticationBackend(ModelBackend): def authenticate(self, request, email=None, password=None, **credentials): try: user = UserModel.objects.get(email=email) except UserModel.DoesNotExist: return None else: if user.check_password(password) and self.user_can_authenticate(user): return user
from django import forms from django.contrib.auth import authenticate, get_user_model from django.utils.text import capfirst from django.utils.translation import gettext_lazy as _
self.email_field = UserModel._meta.get_field("email") if self.fields["email"].label is None: self.fields["email"].label = capfirst(self.email_field.verbose_name)
if email is not None and password: self.user_cache = authenticate(self.request, email=email, password=password) if self.user_cache is None: raise forms.ValidationError( self.error_messages['invalid_login'], code='invalid_login', params={"email": self.email_field.verbose_name} ) else: self.confirm_login_allowed(self.user_cache)
return self.cleaned_data
def confirm_login_allowed(self, user): if not user.is_active: raise forms.ValidationError(self.error_messages["inactive"], code='inactive')
def get_user_id(self): if self.user_cache: return self.user_cache.id return None