Axios请求时Node.js cookie-parser返回空对象问题求解
问题修复方案
你遇到的问题是浏览器跨域请求默认不携带凭证(Cookie等)导致的,Postman不受同源策略限制会自动携带Cookie,因此测试正常,浏览器环境需要额外配置前后端参数。
第一步:修改前端Axios请求配置
所有需要携带Cookie的Axios请求都需要开启withCredentials参数,你可以选择单次请求配置或者全局配置:
- 单次请求配置(修改你当前的get请求代码):
useEffect(() => { axios.get('http://localhost:5000/get-cookie', { withCredentials: true }) .then(response => { console.log(response.data); }) }, [])
- 全局配置(在项目入口文件添加一行,后续所有请求自动携带凭证):
axios.defaults.withCredentials = true
注意:必须先调用/set-cookie/:id接口成功设置Cookie之后,再调用/get-cookie接口才能拿到对应值。
第二步:修改后端CORS配置
默认的CORS配置不支持跨域凭证请求,需要显式指定允许的前端源、开启凭证支持,不能使用通配符*作为origin值:
修改你后端app.js中的cors中间件配置:
// 替换原来的 app.use(cors()); app.use(cors({ origin: 'http://localhost:3000', // 替换为你前端实际的访问地址,生产环境替换为对应域名 credentials: true }));
生产环境适配补充
如果部署到生产环境,需要确保前后端域名属于同一根域,同时设置Cookie时可以加上domain和sameSite参数适配浏览器安全策略:
res.cookie("User_ID", req.params.id, { maxAge: 1000 * 60 * 60 * 24 * 31, httpOnly: true, sameSite: 'lax', domain: '.yourdomain.com' // 替换为你的项目根域名 })
内容的提问来源于stack exchange,提问作者Lohith K.
相关产品推荐
相关产品推荐

