|
|
|
|
@ -1,42 +0,0 @@
|
|
|
|
|
# 导入获取用户模型的函数
|
|
|
|
|
from django.contrib.auth import get_user_model
|
|
|
|
|
# 导入模型后端认证基类
|
|
|
|
|
from django.contrib.auth.backends import ModelBackend
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class EmailOrUsernameModelBackend(ModelBackend):
|
|
|
|
|
"""
|
|
|
|
|
自定义认证后端,允许使用用户名或邮箱登录
|
|
|
|
|
继承自Django的ModelBackend
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
def authenticate(self, request, username=None, password=None, **kwargs):
|
|
|
|
|
"""用户认证方法"""
|
|
|
|
|
# 检查用户名中是否包含@符号(判断是否为邮箱)
|
|
|
|
|
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:
|
|
|
|
|
# 用户不存在,返回None
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
def get_user(self, username):
|
|
|
|
|
"""根据用户ID获取用户对象"""
|
|
|
|
|
try:
|
|
|
|
|
# 根据主键(用户ID)获取用户对象
|
|
|
|
|
return get_user_model().objects.get(pk=username)
|
|
|
|
|
# 捕获用户不存在的异常
|
|
|
|
|
except get_user_model().DoesNotExist:
|
|
|
|
|
# 用户不存在,返回None
|
|
|
|
|
return None
|