Django是否可以使用login()和authenticate()与不是BaseUserManager的模型?即我可以这样做:
class RecipientAuth(object):
def authenticate(self, mobile=None):
""" Authenticate a user based on email address as the user name. """
try:
user = Recipient.objects.get(mobile=mobile)
except Recipient.DoesNotExist:
return None
登录
from django.contrib.auth import authenticate, login, logout
user = authenticate(mobile=mobile)
login(request, user)
在这样的模型上:
class Recipient(models.Model):
email = models.EmailField()
mobile = PhoneNumberField(validators=[validate_mobile])
我试过了:
'AnonymousUser'对象没有属性'backend'
答案 0 :(得分:2)
您的代码失败,因为您的身份验证后端不符合所需的协议。引用docs:
无论哪种方式,authenticate应检查它获取的凭据,如果凭据有效,它应返回与这些凭据匹配的User对象。如果它们无效,则应返回无。
您需要添加return user
:
try:
user = Recipient.objects.get(mobile=mobile)
return user
except Recipient.DoesNotExist:
return None