API请求未携带Token Cookie致401未授权问题排查
问题核心
生产环境下跨域请求购物车接口时,浏览器未将已存在的认证Cookie携带至后端,导致返回401 Unauthorized,开发环境正常是因为本地域名规则与生产环境跨域场景不同。
针对性修复方案
1. 补全Cookie的Domain属性
登录接口设置Cookie时未指定domain,导致Cookie仅绑定在后端域名(ecommerce-kdk6.onrender.com),前端域名(dash-deals.onrender.com)发起跨域请求时无法携带该Cookie。
修改UserRouter.js中的Cookie配置:
res.cookie("token", token, { httpOnly: true, sameSite: 'None', secure: true, domain: '.onrender.com', // 适配同主域下的跨域场景,若前后域名完全独立需调整为前端域名 path: '/' // 确保所有路径均可访问该Cookie });
2. 修复JWT认证的安全漏洞
当前认证中间件使用jwt.decode仅解码Token但不验证签名有效性,存在被篡改的风险,同时替换为jwt.verify可确保Token合法性:
修改Auth.js中的认证逻辑:
// 替换原jwt.decode为jwt.verify const decoded = jwt.verify(token, "DHRUV");
3. 强化CORS配置的兼容性
显式声明允许的请求方法和头信息,避免浏览器预请求(OPTIONS)被拦截:
修改app.js中的CORS配置:
app.use(cors({ origin: 'https://dash-deals.onrender.com', credentials: true, methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], allowedHeaders: ['Content-Type'] }));
4. 确认购物车路由已挂载认证中间件
检查cartRouter,确保/get-cart端点已应用isAuthenticated中间件:
// cartRouter.js示例配置 cartRouter.get('/get-cart', isAuthenticated, async (req, res) => { // 购物车业务逻辑 });
5. 验证HTTPS环境一致性
secure: true的Cookie仅在HTTPS协议下生效,确认前后端生产环境均使用HTTPS(Render平台默认提供HTTPS,无需额外配置)。
内容的提问来源于stack exchange,提问作者dgdev
相关产品推荐
相关产品推荐

