生产环境出现No Token Found/Provided错误,本地正常求助
React+Node.js 生产环境认证 Token 丢失问题排查方案
1. 跨域请求凭证配置检查
- 前端必须显式开启请求携带凭证:
全局Axios配置:
或单个请求配置:axios.defaults.withCredentials = true;axios.post('/api/auth/login', loginData, { withCredentials: true }); - 后端CORS不能用通配符
*作为origin,必须指定生产环境具体域名,同时开启凭证允许:app.use(cors({ origin: 'https://your-prod-domain.com', // 替换为实际生产域名 credentials: true }));
2. Cookie 属性生产环境适配
- SameSite 配置:生产环境若为同站部署设为
'Lax',跨站部署设为'None'(但'None'必须配合secure: true),避免浏览器拦截Cookie:res.cookie('token', jwtToken, { httpOnly: true, secure: process.env.NODE_ENV === 'production', sameSite: process.env.NODE_ENV === 'production' ? 'Lax' : 'Strict', maxAge: 86400000, domain: '.your-prod-domain.com' // 主域统一配置,覆盖所有子域 }); - 确认Domain属性无多余前缀/后缀,比如主域是
example.com,子域部署时设为.example.com即可。
3. Token 提取逻辑验证
检查后端authMiddleware是否同时支持Cookie和请求头两种提取方式,避免仅从请求头读取:
// authMiddleware.js 正确逻辑示例 const token = req.cookies.token || req.headers.authorization?.split(' ')[1]; if (!token) { return res.status(401).json({ message: 'No token found or no token provided' }); }
4. HTTPS 环境 Cookie 安全适配
如果生产环境用HTTPS,必须开启secure: true,现代浏览器会拒绝在HTTPS环境下保存非secure标记的Cookie;若为HTTP环境(不建议生产使用),则secure必须设为false。
5. 前端请求时机与路由检查
- 避免页面跳转过早导致Cookie未完成存储就发起请求,确保认证接口响应完成后再进行路由跳转。
- 单页应用路由切换后发起的API请求,确认
withCredentials配置未被覆盖。
6. 浏览器调试定位
生产环境打开开发者工具:
- 进入Application -> Cookies,检查
tokenCookie是否存在,核对domain、secure、sameSite属性是否符合配置。 - 查看Network面板,确认请求头包含
Cookie字段,后端响应头的Set-Cookie是否正确返回。
内容的提问来源于stack exchange,提问作者Nithin Kumar
相关产品推荐
相关产品推荐

