如何解决Express CMS仅POST删除路由CSRF检测不通过及token不渲染问题
Express CMS删除路由CSRF报错解决方案
- 修复csrfToken未渲染问题
当前删除表单的_csrf隐藏域value为空,是触发CSRF报错的核心原因。该问题是因为渲染删除按钮所在页面的GET路由,没有将csrfToken传入模板上下文。你可以参考其他正常路由的传参逻辑,在对应路由的res.render方法中补充csrfToken参数即可:
// 示例:渲染包含删除按钮的分类管理页的路由 app.get('/admin/category', (req, res) => { res.render('admin/category-list', { // 保留原有其他模板参数 csrfToken: req.csrfToken() // 新增该行传递csrf token到模板 }) })
修改完成后确认模板中变量名和传递的参数名完全一致,无拼写错误,即可正常渲染token值。
单POST路由无需额外配置
CSRF中间件默认校验所有POST/PUT/DELETE等修改类请求,只要请求携带正确的_csrf参数即可通过校验,不需要为删除路由单独新增GET配对路由。你表单中携带的newMethod=DELETE参数,仅需确认你已配置method-override中间件可正确识别该参数转换请求方法即可,不会影响CSRF校验结果。结果验证
修改完成后刷新页面,查看表单源码中_csrf隐藏域的value是否已填充随机字符串,提交删除请求即可正常通过校验。
内容的提问来源于stack exchange,提问作者freelanceing mindset
相关产品推荐
相关产品推荐

