我尝试使用电子邮件而不是用户名登录,所以我使用了自定义后端。表单会检查电子邮件是否正确以及密码是否匹配(例如,如果表单填写不正确,我会报错),但是它并没有使用用户名登录用户(删除后) 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',
)
我真的很困惑,为什么如果后端的角色仅仅是返回用户,它为什么不登录用户。因此,如果有人可以向我解释我做错了什么以及后端的实际目的是什么。
谢谢。
答案 0 :(得分:0)
get_user中缺少返回值。
def get_user(self, user_id):
try:
# HERE
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None