重置密码后出现Django身份验证问题

时间:2016-04-01 07:21:47

标签: python django

我正在使用django 1.8作为我的项目,我尝试在中间件中使用django.contrib.auth.middleware.SessionAuthenticationMiddleware在重置密码后注销其他会话。这很好,但我遇到的问题是重置后它甚至会注销更改密码的会话。我希望在重置密码后,我们更改密码的会话不会被注销。我们的user模型继承自AbstractUser

1 个答案:

答案 0 :(得分:4)

如果您使用自己的视图更改密码,django可让您在更改密码后更新会话,以便用户不会被注销。

为此,您可以使用update_session_auth_hash功能。

Django' user_change_password在密码更改后更新会话。但是对于您拥有的自定义视图,您可以使用update_session_auth_hash,如下所示:

from django.contrib.auth import update_session_auth_hash

def password_change(request):
    if request.method == 'POST':
        form = PasswordChangeForm(user=request.user, data=request.POST)
        if form.is_valid():
            form.save()
            update_session_auth_hash(request, form.user)
    else:
        ...

Django关于session invalidation on password change

的文档

您可以使用django-allauth而不是完成所有这些操作。它是一个很棒的应用程序,并具有所有类型的身份验证功能。