Django使用login()和authenticate()与不是BaseUserManager的模型

时间:2014-02-25 17:57:44

标签: python django

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'

1 个答案:

答案 0 :(得分:2)

您的代码失败,因为您的身份验证后端不符合所需的协议。引用docs

  

无论哪种方式,authenticate应检查它获取的凭据,如果凭据有效,它应返回与这些凭据匹配的User对象。如果它们无效,则应返回无。

您需要添加return user

try:
   user = Recipient.objects.get(mobile=mobile)
   return user
except Recipient.DoesNotExist:
   return None