from django.contrib.auth.backends import ModelBackend from pingcap_sso.models import User class SimpleModelBackend(ModelBackend): """ Authenticate user with credentials, only check username and password. Return `None` if authenticate failed. Now we support user login via email address or phone number. """ def authenticate(self, request, identifier=None, user=None, password=None, sms_code=None, **kwargs): if not identifier and not user: # support django-admin-site identifier = kwargs.get('username') if not user: try: user = User.objects.find_user(identifier) except User.DoesNotExist: # Run the default password hasher once to reduce the timing # difference between an existing and a non-existing user (#20760). User().set_password(password) return if password: if user.check_password(password): return user else: return if sms_code and user.check_sms_code(sms_code): return user else: return