【发布时间】:2021-09-24 05:47:10
【问题描述】:
编辑 2021 年 7 月 16 日
目前没有回复,所以我会尽量让我的问题更准确
当我调用 PasswordChangeView 时,所有会话变量都被重置,我需要将会话变量内容存储在其他地方(?)并在密码更改后重新设置我的所有会话变量(在 form_valid 的末尾() 函数)。
希望这更清楚,有人可以带我通过解决方案...
我已经使用 Ajax(JQuery 表单插件)覆盖了 Django PasswordChangeView,它可以工作,除了所有会话变量都被重置。
阅读 Django 文档,我知道这是“正常行为”,但我需要重新初始化一些会话数据;如果没有,那么使用 Ajax 更改密码就没有真正的兴趣......
一开始,我认为调用 update_session_auth_hash 函数是造成这种行为的原因,但它似乎不是真的,因为在 form_valid 函数中,request.user 已设置但请求.session 数据被重置,甚至在保存 fom 之前...
所以我的问题是当 PasswordChangeView 被调用时,我可以在何时/何地检索要重新设置的会话变量?
class PasswordChangeView(auth_views.PasswordChangeView):
def form_valid(self, form):
print('request.user',self.request.user) # return connected user
print('request.session.get("selected_database")',self.request.session.get("selected_database")) # return None
self.object = form.save()
update_session_auth_hash(self.request, self.object) # prevent user’s auth session to be invalidated and user have to log in again
print('request.session.get("selected_database")',self.request.session.get("selected_database")) # return None
return JsonResponse ({'data': form.is_valid()},status = 200)
【问题讨论】:
标签: django authentication session-variables change-password