我正在使用django 1.8作为我的项目,我尝试在中间件中使用django.contrib.auth.middleware.SessionAuthenticationMiddleware
在重置密码后注销其他会话。这很好,但我遇到的问题是重置后它甚至会注销更改密码的会话。我希望在重置密码后,我们更改密码的会话不会被注销。我们的user
模型继承自AbstractUser
答案 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
而不是完成所有这些操作。它是一个很棒的应用程序,并具有所有类型的身份验证功能。