我面对的是一个非常具体的问题,我把它缩小到了一个特定的原因,我担心我可能只是误解了或者错误地运用了我的逻辑。
Django用户将知道CSRF保护是由Django中间件处理的,项目中使用的每个表单后面都应该有一个{%CSRF_token%}标记。我的项目包含一个应用程序,它基于用户的OAuth2认证会话为用户提供数据,然后我保存/保留一些特定于会话的REST数据。
正如您可能猜到的那样,在新用户或某些特定参数根据当前用户的会话发生变化的情况下,我必须经常清除会话缓存。为此,我保留了请求.会话然后像这样清除会话
remember_dictionary = {
'''some values that I wish to remember'''
}
request.session.clear()
for key, value in remember_dictionary.items():
if value:
request.session[key] = value
如果用户在网站上同时有两个表单时调用了此函数,则旧表单将抛出一个禁止的错误/csrf令牌丢失。我知道请求.会话.清除()可能与此有关,但我的印象是csrf代币将保持不变请求会话?据我所知,请求.会话.刷新()是要删除的内容请求.会话创造一个新的?此外,我试着把csrf_令牌保存在请求.会话在我的设置.py
^{pr2}$然后在清除会话之前将当前的csrf令牌值包括在member字典中
remember_dictionary = {
'''some values that I wish to remember''',
'_csrf_token': request.session.get('_csrf_token', False)
}
request.session.clear()
for key, value in remember_dictionary.items():
if value:
request.session[key] = value
我已经验证了csrf_令牌在第二个方法中得到了记住,但是提交旧的表单仍然会抛出Forbidden Error/csrf token missing。
在我的工作流程中,我是否遗漏了什么?谢谢任何帮助。
目前没有回答
相关问题 更多 >
编程相关推荐