【问题标题】:Django password changeDjango 密码更改
【发布时间】:2016-03-22 15:25:03
【问题描述】:

为什么以下代码会导致我的用户在输入新的有效密码时退出?

@login_required
def change_password(request):
    pass_form = PasswordChangeForm(user=request.user)
    if request.method == 'POST':
        pass_form = PasswordChangeForm(user=request.user, data=request.POST)
        if pass_form.is_valid():
            pass_form.save()
            return render(request,'coursework/profile.html',
                                      {'pass_form' : pass_form,
                                       'pass_msg' : 'Password Updated'})
    return render(request, 'coursework/new_password_form.html',
                              {'form': pass_form})

【问题讨论】:

    标签: python django python-2.7


    【解决方案1】:

    这是 Django 实现的一种安全措施,在默认配置中启用 - 一旦用户更改密码,所有现有会话都将失效。见https://docs.djangoproject.com/en/1.9/topics/auth/default/#session-invalidation-on-password-change

    您需要在pass_form.save() 之后将以下内容添加到您的视图中,以保持当前会话有效:

    update_session_auth_hash(request, pass_form.user)
    

    【讨论】:

      【解决方案2】:

      Django invalidates sessions when the password is changed。您需要致电update_session_auth_hash 来防止这种情况发生。

      请注意,您不必编写自己的change_password 方法。 Django 带有一个password_change 方法,它负责为您更新会话。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-15
        • 1970-01-01
        • 2022-10-07
        • 1970-01-01
        • 2021-10-18
        • 2013-03-05
        • 1970-01-01
        相关资源
        最近更新 更多