django:如何知道未通过身份验证的原因

django:如何知道未通过身份验证的原因,django,Django,我试图使用authenticate函数在Django Shell上测试用户名和原始密码 username = "test@test.com" raw_password = "password" user = authenticate(username=email, password=raw_password) 我知道这个用户名和密码不存在。当我运行此代码时,用户返回为无。是否有办法获取失败状态或失败原因 我想将失败的原因发送到我的应用程序,如电子邮件无效或密码无效或用户

我试图使用authenticate函数在Django Shell上测试用户名和原始密码

    username = "test@test.com"
    raw_password = "password"
    user = authenticate(username=email, password=raw_password)
我知道这个用户名和密码不存在。当我运行此代码时,
用户
返回为
。是否有办法获取失败状态或失败原因


我想将失败的原因发送到我的应用程序,如电子邮件无效或密码无效或用户未激活,或出于任何原因未进行身份验证。

顺便说一句,未测试,但应该可以工作!!(仅检查用户是否存在,密码是否正确,以及是否处于活动状态)


“身份验证”不会检查用户是否处于活动状态。它不会告诉你问题是故意的用户名还是密码:那会有安全风险。还有其他方法吗?好的。这种间接方法看起来是唯一的方法。@Santhoshyedid这种方法不会检查所有内容,而是检查更多内容!!您可以使用另一种不是消息的东西,但是消息框架是一个很好的使用框架@Micolho
.objects.get()
不返回
None
,而是引发
DoesNotExist
(代码已修复)。请注意,这不一定适用于所有auth.backend。此外,在身份验证错误消息中过于具体可能会泄露一些个人信息。@Brunodesshuilliers ty,用于编辑我的代码!!我从来没有用过这个,因为我也这么认为。。。在我看来,只有一个带有“登录失败”的警报就足够了!!
from django.contrib import messages

if user is not None:
    if not user.is_active:
        messages.add_message(request, messages.WARNING, 'Account has been disabled!')
    # do what you want
else:
    try:
        x = User.objects.get(username=username)
    except User.DoesNotExist:
        messages.add_message(request, messages.WARNING, 'Invalid email!')
    else:
        if not x.check_password(password):
            messages.add_message(request, messages.WARNING, 'Invalid password!')