登录不使用自定义后端进行

时间:2018-07-09 17:07:29

标签: django

我尝试使用电子邮件而不是用户名登录,所以我使用了自定义后端。表单会检查电子邮件是否正确以及密码是否匹配(例如,如果表单填写不正确,我会报错),但是它并没有使用用户名登录用户(删除后)  AUTHENTICATION_BACKENDS),我可以正常登录。

所以我认为它来自后端,但是似乎可以正常工作,我使用了打印件,并且确实返回了用户。 这是我的backends.py,存储在“用户”文件中

from .models import User
class EmailBackend(object):
    def authenticate(self, username=None, password=None, **kwargs):
        try:
            user = User.objects.get(email=username)
        except User.MultipleObjectsReturned:
            return None
        except User.DoesNotExist:
            return None
        if getattr(user, 'is_active') and user.check_password(password):
            #print('reached')
            return user
        return None

    def get_user(self, user_id):
        try: 
            User.objects.get(pk=user_id)
        except User.DoesNotExist:
            return None

这就是我的称呼

AUTHENTICATION_BACKENDS = (
    'users.backends.EmailBackend',
)

我真的很困惑,为什么如果后端的角色仅仅是返回用户,它为什么不登录用户。因此,如果有人可以向我解释我做错了什么以及后端的实际目的是什么。

谢谢。

1 个答案:

答案 0 :(得分:0)

get_user中缺少返回值。

def get_user(self, user_id):
    try: 
        # HERE
        return User.objects.get(pk=user_id)
    except User.DoesNotExist:
        return None