diff --git a/user_login_backend.py b/user_login_backend.py new file mode 100644 index 0000000..f2daea2 --- /dev/null +++ b/user_login_backend.py @@ -0,0 +1,28 @@ +from django.contrib.auth import get_user_model +from django.contrib.auth.backends import ModelBackend + + +class EmailOrUsernameModelBackend(ModelBackend): + #lht: """ + #lht: 允许使用用户名或邮箱登录 + #lht: """ + + def authenticate(self, request, username=None, password=None, **kwargs): + #lht: 根据输入内容判断是邮箱还是用户名 + if '@' in username: + kwargs = {'email': username} + else: + kwargs = {'username': username} + try: + user = get_user_model().objects.get(**kwargs) + if user.check_password(password): + return user + except get_user_model().DoesNotExist: + return None + + def get_user(self, username): + #lht: 根据用户名获取用户对象 + try: + return get_user_model().objects.get(pk=username) + except get_user_model().DoesNotExist: + return None