Double Submit Cookie的token怎么同时放在cookie和请求头里?

W″逸翔 阅读 11

我在用Vue和Express实现Double Submit Cookie防护,但一直报错。后端设置的cookie是Secure和HttpOnly的,前端用document.cookie拿不到值。尝试在axios拦截器里加请求头:


axios.interceptors.request.use(config => {
  const csrftoken = document.cookie.replace(/.*csrftoken=([^;]*)/, '$1');
  config.headers['X-CSRF-Token'] = csrftoken;
  return config;
});

但控制台提示cookie为空,后端返回403。明明登录时后端设置了Set-Cookie: csrftoken=xxx,难道HttpOnly导致无法读取?或者我应该把token存两份,一份HttpOnly,一份普通cookie?

我来解答 赞 3 收藏
二维码
手机扫码查看
1 条解答
 ___华丽
HttpOnly的cookie确实拿不到,你得让后端同时设置两个cookie,一个HttpOnly存敏感数据,一个普通cookie存csrf token。后端代码大概这样:

res.cookie('csrftoken', token, { httpOnly: false, secure: true });
res.cookie('session', sessionToken, { httpOnly: true, secure: true });


前端axios拦截器不用改,应该能用。记得确保前后端的cookie domain和path配置一致,不然会有问题。
点赞
2026-02-18 02:01