from django.contrib.auth.backends import ModelBackend
from django.contrib.auth import get_user_model
from django.db.models import Q
User = get_user_model()# 这是User其实是自定义的,当然也可以是原生的classCustomBackend(ModelBackend):"""
自定义用户验证
"""defauthenticate(self, username=None, password=None,**kwargs):try:#用户名和手机都能登录
user = User.objects.get(
Q(username=username)| Q(mobile=username))if user.check_password(password):return user
except Exception as e:returnNone
解决
参考了官方文档,修改如下
# from django.contrib.auth.backends import ModelBackendfrom django.contrib.auth.backends import BaseBackend
from django.contrib.auth import get_user_model
from django.db.models import Q
User = get_user_model()# 这是User其实是自定义的,当然也可以是原生的# django3.0的写法,参考自官方文档。以前的写法,已经失效classCustomBackend(BaseBackend):"""
自定义用户验证
"""defauthenticate(self, request, username=None, password=None):try:#用户名和手机都能登录
user = User.objects.get(
Q(username=username)| Q(mobile=username))if user.check_password(password):return user
except Exception as e:returnNone# 特别注意,这个get_user不能少defget_user(self, user_id):try:return User.objects.get(pk=user_id)except User.DoesNotExist:returnNone