前后端分离时,前端表单里的 CSRF token 怎么设置(Web API 是否需要设置 CSRF 保护)

后端渲染模板的时候可以传递token,现在没有这个字段,form.validate()总是false

前后端某种意义上来说,它本身就是分离的. 后端使用模板,相当于每次都返回html文件.(也就是说,你这里表单的token已经在这个渲染好的html文件里面了) 同理,你将这个token单独的传给前端也是一样的但需要注意,你这个token是扩展帮你创建的,你需要自己手动获取里面的内容,这会十分的麻烦

回到问题本身, 既然form.validate需要token字段,那前端提交的form表单添加该字段即可处理.


上面是答案
但既然都是前后端分离了, 如果普通数据还使用form.validate有点怪异吧 :rofl:

如果没猜错的话, 前后端分离,那么后端就是提供 Web API,通过 access token 认证,每一个请求都会携带这个 token 进行认证(无状态)。通常不会使用 cookie。

从 form.validate() 猜测是使用 Flask-WTF 验证表单数据,所以你说的 token 应该是指 CSRF token,而 CSRF 是利用 cookie 发动的攻击,前后端分离时并不会使用 cookie 识别用户身份,所以不用担心 CSRF 问题,可以直接关掉 Flask-WTF 的 CSRF 验证(将配置 WTF_CSRF_ENABLED 设为 False 即可),或是使用 Webargs 这类通用型工具来验证请求数据。

下次问问题建议提供尽可能详细的信息(标题亦同),这样可以避免产生歧义和误解。