Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Flask JWT扩展集cookie错误_Javascript_Python_Flask_Flask Jwt - Fatal编程技术网

Javascript Flask JWT扩展集cookie错误

Javascript Flask JWT扩展集cookie错误,javascript,python,flask,flask-jwt,Javascript,Python,Flask,Flask Jwt,我已经创建了一个API,它应该能够同时响应移动设备和web浏览器。例如,/web/toys用于web,而/API/toys用于JSON响应。我使用JW令牌作为身份验证的手段 我用HTML显示表单,在后台,我调用jQueryAjax的方法发布到我的API。我将访问令牌保留在会话cookie中。为了防止CSRF攻击,我使用Flask JWT Extended 当我用@jwt_required装饰视图并且CSRF设置为True时,即使在设置和传输cookie时,标题和cookie中也会出现缺少jwt的

我已经创建了一个API,它应该能够同时响应移动设备和web浏览器。例如,
/web/toys
用于web,而
/API/toys
用于JSON响应。我使用JW令牌作为身份验证的手段
我用HTML显示表单,在后台,我调用jQueryAjax的方法发布到我的API。我将访问令牌保留在会话cookie中。为了防止CSRF攻击,我使用Flask JWT Extended

当我用
@jwt_required
装饰视图并且CSRF设置为True时,即使在设置和传输cookie时,标题和cookie中也会出现
缺少jwt的情况。我检查了源代码,发现在请求头中设置
X-CSRF-TOKEN
很重要
但是,由于端点同时响应GET和POST调用,我如何在GET调用中设置标题,而不必使用jQuery加载整个页面?
基本上,我希望在网页上显示表单,当用户单击submit时,使用jQuery将表单传输到现有API<如果有更好的方法处理事情,我很想知道。

谢谢

烧瓶JWT的作者在此扩展。正如您所发现的,通过此扩展,我们目前正在为每种类型的请求执行CSRF保护。但是,只有在状态更改请求时才真正需要CSRF保护:请参阅:

保护所有请求类型的好处是,如果您有一个端点错误地更改了GET请求中的状态(没有技术原因不能这样做),那么它就容易受到CSRF攻击。现在,如果后端的设计更“符合规范”,这就不再是一个问题。听起来我需要更新Flask JWT Extended,以便在某些类型的请求上忽略CSRF保护,就像Flask WTF的操作方式一样。今天我将尝试更新此内容

或者,如果您的后端直接提供JSON而不是html(例如RESTAPI后端和javascript前端),那么您可以使用Ajax使用CSRF令牌执行GET请求。在这个用例中,我们可以使用Ajax调用

   get (options) {
     let self = this
     $.ajax({
       method: 'GET',
       dataType: 'json',
       headers: {
         'X-CSRF-TOKEN': Cookies.get('csrf_access_token')
       },
       url: "some_url",
       success (result, statusText) {
         // Handle success
       },
       error (jqXHR, textStatus, errorThrown) {
         //handle error
       }
     })
   }
编辑:如果CSRF令牌不存在,并且您正在使用JWTs的头和cookie,我还希望保留CSRF错误消息。这两方面的进展可在此处跟踪:


您可以发布html表单代码吗?该功能已在1.3.0版中发布。默认情况下,它现在只检查PUT、PATCH、POST和DELETE请求的CSRF保护。您可以通过“JWT\U CSRF\U方法”配置选项更新此列表。非常感谢您!我可以使用Flask的MethodView并在后期定义上应用装饰器吗?我的直觉是,您仍然需要在实际的视图函数本身上应用装饰器。这就是说,如果您有一个接受多个方法(方法=['GET','POST'])的视图函数,您仍然可以安全地将jwt_所需的装饰器添加到该视图中,并且它只会检查发送到该视图的POST请求的CSRF。