如何在ModelBackEnd中检查Django中的非活动用户
我如何检查ModelBackEnd中的非活动自定义用户而不返回None(如AllowlUsersModelBackend所做的)?以下是我目前掌握的情况:如何在ModelBackEnd中检查Django中的非活动用户,django,django-models,Django,Django Models,我如何检查ModelBackEnd中的非活动自定义用户而不返回None(如AllowlUsersModelBackend所做的)?以下是我目前掌握的情况: from django.contrib.auth import backends, get_user_model from django.db.models import Q UserModel = get_user_model() class ModelBackend(backends.ModelBackend): def au
from django.contrib.auth import backends, get_user_model
from django.db.models import Q
UserModel = get_user_model()
class ModelBackend(backends.ModelBackend):
def authenticate(self, request, username=None, password=None, **kwargs):
if username is None:
username = kwargs.get(UserModel.USERNAME_FIELD)
try:
# user = UserModel._default_manager.get_by_natural_key(username)
# You can customise what the given username is checked against, here I compare to both username and email fields of the User model
user = UserModel.objects.get(Q(username__iexact=username) | Q(email__iexact=username))
#print("what is going on")
except UserModel.DoesNotExist:
# Run the default password hasher once to reduce the timing
# difference between an existing and a nonexistent user (#20760).
UserModel().set_password(password)
else:
if user.check_password(password) and self.user_can_authenticate(user):
return user
return super().authenticate(request, username, password, **kwargs)
获取用户实例时,将条件添加到查询中
user = UserModel.objects.exclude(is_active=False).get(Q(username__iexact=username) | Q(email__iexact=username))
你想干什么?允许非活动用户登录?我只需要在登录期间检测is_active=False的帐户。用于什么目的?我只想阻止禁用的帐户重新登录。我通过在try语句中返回用户就知道了。