Hono框架Cookie设置异常:后端无法获取已配置的Cookie
问题排查与解决方案
核心问题1:登录请求未携带凭证标识
你的前端登录接口的POST请求没有设置withCredentials: true,浏览器收到Set-Cookie响应头时,会因为请求未声明携带凭证而拒绝存储Cookie。
修改前端登录请求代码:
await axios.post( `${BACKED_URL_LOCAL}api/v1/user/signin`, signInDetails, { withCredentials: true } // 必须添加这一行 ); // 调用/me接口获取用户数据 const res = await axios.get(`${BACKED_URL_LOCAL}api/v1/me`,{withCredentials:true}); setUser(res.data.userDetails);
核心问题2:Cookie未显式指定Domain
当前后端在localhost不同端口运行时(比如前端5173、后端3000),浏览器会将不同端口视为不同源。如果Cookie未指定domain: 'localhost',浏览器会默认绑定到当前端口的域名,导致跨端口请求无法携带Cookie。
修改后端Set-Cookie代码,添加Domain配置:
setCookie(ctx, cookie_name, token, { httpOnly: true, secure: false, sameSite: 'Lax', path: '/', maxAge: 60 * 60 * 24, domain: 'localhost' // 新增该行 });
额外验证步骤
- 响应头检查:登录接口返回的
Set-Cookie头中,确认包含domain=localhost和path=/字段。 - 浏览器验证:登录成功后,打开浏览器Application标签页,查看Cookies下的
localhost条目,确认目标Cookie已存在。 - 后端调试:在
/me接口中先打印所有请求Cookie,确认是否能正常接收,再用getCookie提取指定值:
app.get('/api/v1/me', async (ctx) => { // 打印所有Cookie用于调试 console.log('所有请求Cookie:', ctx.req.headers.get('cookie')); // 获取指定Cookie const token = getCookie(ctx, cookie_name); console.log('目标Token:', token); // 后续认证逻辑... });
内容的提问来源于stack exchange,提问作者Ashoka Samrat
相关产品推荐
相关产品推荐

