Django - 用户 is_active
Django - user is_active
这是我的用户认证方式:
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'))
我不知道这里出了什么问题...有什么线索吗?
对 authenticate
的调用已经检查用户是否设置了 is_active 标志,如果没有则 returns None。不用单独检查了。
默认 ModelBackend
身份验证后端开始拒绝 Django 1.10 中的非活动用户。因此,您的 authenticate()
调用 returns None
,并且您从外部 if/else 收到 Invalid username/password! 消息声明。
正如 Daniel 所说,如果您使用默认 ModelBackend
,则不再需要在登录视图中检查 user.is_active
。
如果你真的想要authenticate
到return个非活跃用户,那么你可以使用AllowAllUsersModelBackend
代替。如果您这样做,那么您有责任检查登录视图中的 is_active
标志。
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.AllowAllUsersModelBackend']
这是我的用户认证方式:
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'))
我不知道这里出了什么问题...有什么线索吗?
对 authenticate
的调用已经检查用户是否设置了 is_active 标志,如果没有则 returns None。不用单独检查了。
默认 ModelBackend
身份验证后端开始拒绝 Django 1.10 中的非活动用户。因此,您的 authenticate()
调用 returns None
,并且您从外部 if/else 收到 Invalid username/password! 消息声明。
正如 Daniel 所说,如果您使用默认 ModelBackend
,则不再需要在登录视图中检查 user.is_active
。
如果你真的想要authenticate
到return个非活跃用户,那么你可以使用AllowAllUsersModelBackend
代替。如果您这样做,那么您有责任检查登录视图中的 is_active
标志。
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.AllowAllUsersModelBackend']