ExpressJS无法获取Refresh Cookie问题排查(React+Node.js)
问题场景
本地开发环境中(Node.js服务运行在localhost:5000),登录接口已成功生成并通过httpOnly Cookie返回Refresh Token,但调用刷新接口时始终无法获取到该Cookie,仅能看到Google Analytics相关的Cookie:
- _ga: 'xxxxxxxxxxxxxxxxx',
- _gid: 'xxxxxxxxxxxxxxxx',
- _gat_gtag_UA_xxxxxx: 'x',
- _ga_QPY49S2WC4: 'xxxxxxxxxxxxxxxxxxx'
登录接口核心代码:
const payload = {name, email}; console.log("payload: ", payload); const accessToken = jsonwebtoken.sign(payload, process.env.ACCESS_TOKEN_KEY, { expiresIn: '15m' }); const refreshToken = jsonwebtoken.sign(payload, process.env.REFRESH_TOKEN_KEY, { expiresIn: '1d' }); console.log("Access Token:", accessToken); // access token is generated console.log("Refresh Token:", refreshToken); // refresh token is generated res.cookie('refreshToken', refreshToken, { httpOnly: true, secure: false, sameSite: 'Lax', maxAge: 24*60*60*1000 }); // call succeeded. what is the name of cookie? res.json({ accessToken });
刷新接口核心代码:
export const handleRefreshToken = async (req, res) => { console.log("Request Cookies", req.cookies); const cookies = req.cookies; if (!cookies?.refreshToken) return res.sendStatus(401);
排查过程
通过浏览器开发者工具的Network面板查看登录接口的响应,能看到refreshToken Cookie确实存在,但浏览器的Cookie列表中未显示该Cookie,说明Cookie未被浏览器持久化保存。
解决方案
客户端使用Axios发起请求时,必须添加{ withCredentials: true }配置,确保浏览器在请求时自动附带Cookie(即使是同域场景下,部分请求模式也需要显式开启该配置)。
示例Axios请求代码:
axios.post('/api/refresh-token', {}, { withCredentials: true }) .then(response => { // 处理响应逻辑 }) .catch(error => { // 处理错误逻辑 });
内容的提问来源于stack exchange,提问作者NRS2000
相关产品推荐
相关产品推荐

