发送POST请求时遭遇无效CSRF Token错误,寻求解决方案
问题分析与解决方法
你遇到的403 invalid csrf token 错误,核心原因是/restore路由被CSRF校验中间件拦截,而GET请求默认无需携带CSRF Token,因此触发了校验失败逻辑。
可行解决方案:
1. 调整路由与CSRF中间件的挂载顺序
确保/restore路由在CSRF中间件之前挂载,让该请求跳过CSRF校验:
// 先挂载restore路由 app.use('/api/your-path', require('./routes/restore')); // 再挂载CSRF中间件 app.use(csrf({ cookie: true })); // 其他业务路由...
2. 配置CSRF中间件忽略指定请求
如果无法调整挂载顺序,可通过自定义逻辑让CSRF中间件跳过/restore路由:
const csrf = require('csurf'); const csrfProtection = csrf({ cookie: true }); // 全局中间件中添加忽略规则 app.use((req, res, next) => { if (req.path.includes('/restore')) { return next(); } csrfProtection(req, res, next); });
3. 检查Session/Cookie中间件配置
req.csrfToken()依赖Session或Cookie存储CSRF密钥,确认express-session等Session中间件在CSRF中间件之前正确启用,否则生成的Token无法与服务端密钥匹配,导致校验失败。
快速验证
临时在/restore路由中打印生成的Token,同时查看服务端Session存储的CSRF密钥,确认两者关联逻辑正常。
内容的提问来源于stack exchange,提问作者bilal saeed
相关产品推荐
相关产品推荐

