代码之家  ›  专栏  ›  技术社区  ›  Donovan Keating

Django PasswordChangeDoneView密码更改后注销

  •  0
  • Donovan Keating  · 技术社区  · 7 年前

    我用的是Django提供的 PasswordChangeView PasswordChangeDoneView 从…起 django.contrib.auth .成功重置密码后,我希望会话无效并注销用户。Django docs 提一下 update_session_auth_hash() 确保用户在更改密码后不会注销。我如何覆盖它,并使其在用户更改密码后注销?

    1 回复  |  直到 7 年前
        1
  •  1
  •   malberts    7 年前

    尝试覆盖 form_valid() 在你的 PaswordChangeView .

    以下是原始版本中的函数 PaswordChangeView source code :

    def form_valid(self, form):
        form.save()
        # Updating the password logs out all other sessions for the user
        # except the current one.
        update_session_auth_hash(self.request, form.user)
        return super().form_valid(form)
    

    在那里你可以看到呼叫 update_session_auth_hash() .取而代之的是删除它,并将以下内容放入子类中:

    from django.contrib.auth import logout
    
    def form_valid(self, form):
        form.save()
        self.request.session.flush()
        logout(self.request)
        return super().form_valid(form)
    

    那就可以了 调用该函数。