【问题标题】:Django - user is_activeDjango - 用户 is_active
【发布时间】:2017-04-03 12:01:59
【问题描述】:

这是我的用户验证方法:

def user_login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(username=username, password=password)

        if user:
            if user.is_active:
                login(request, user)
                return HttpResponseRedirect(reverse('index'))
            else:
                print('TEST')
                messages.info(request, 'Inactive user')
                return HttpResponseRedirect(reverse('index'))
        else:
            messages.error(request, 'Invalid username/password!')
        return HttpResponseRedirect(reverse('index'))
    else:
        return render(request, 'mainapp/login.html', {})

如果用户存在且未激活,则会出现错误消息:

messages.error(request, 'Invalid username/password!')
return HttpResponseRedirect(reverse('index'))

代替:

print('TEST')
messages.info(request, 'Inactive user')
return HttpResponseRedirect(reverse('index'))

我不知道这里出了什么问题……有什么线索吗?

【问题讨论】:

  • 你试过User is not None了吗?
  • 是的,我试过了。
  • Django 带有authentication views,包括登录视图。你不必自己写!

标签: django django-authentication


【解决方案1】:

默认的ModelBackend 身份验证后端开始拒绝Django 1.10 中的非活动用户。因此,您的 authenticate() 调用返回 None,并且您从外部 if/else 语句中收到 无效的用户名/密码! 消息。

正如丹尼尔所说,如果您使用默认的ModelBackend,则不再需要在登录视图中检查user.is_active

如果您确实希望authenticate 返回非活动用户,则可以改用AllowAllUsersModelBackend。如果您这样做,那么您有责任在您的登录视图中检查is_active 标志。

AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.AllowAllUsersModelBackend']

【讨论】:

    【解决方案2】:

    authenticate 的调用已经检查了用户是否设置了is_active 标志,如果没有则返回None。无需单独检查。

    【讨论】:

    • 如何检查用户是否存在但处于非活动状态?
    • 你为什么要这样做?
    • 我正在学习 Django,由于有“is_active”标志,我想知道如何使用它。
    • 一个原因可能是为禁用/非活动用户显示验证错误,以通知他们他们不再活动?
    • 在 django 1.9 中,authenticate 不会检查 user.is_active,但在 django 2.1 中会自动检查。见django 1.9 docdjango 2.1 doc
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 2021-11-11
    • 2022-06-17
    相关资源
    最近更新 更多