You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:01:05