Nuxt3中getCookie()为何因调用场景不同返回结果不一致?
问题原因及解决方法
1. useFetch 默认不携带 Cookie
你在组件或中间件里用useFetch请求接口时,默认不会自动把当前域名的Cookie发送到服务器,但浏览器直接访问接口时会自动携带Cookie,这就是两种场景结果不同的核心原因。
解决方法:给useFetch添加credentials配置,确保请求携带Cookie:
const { data } = await useFetch('/api/verify', { credentials: 'include' })
如果是同域名请求,也可以用credentials: 'same-origin',效果一致。
2. jsonwebtoken.verify 的异步用法错误
你代码里写了await jsonwebtoken.verify(...),但这个方法的回调版本并不是Promise异步函数,await不会生效,会导致逻辑执行顺序混乱(可能还没执行完验证回调就已经返回结果了)。
解决方法:改用jsonwebtoken的Promise版本:
// 导入promise版本的jwt import jwt from 'jsonwebtoken/promises' export default defineEventHandler(async (event) => { const token = getCookie(event, 'jwt') if (!token) { return { error: 'no token' } } try { await jwt.verify(token, 'someSecret') return { ok: true } } catch (err) { return { error: err.message } } })
这样才能正确处理异步验证逻辑,避免因回调执行时机问题引发的错误。
额外提示:中间件场景注意事项
如果是在Nuxt中间件中调用这个接口,要确保中间件是客户端中间件(或在客户端侧执行)——服务端中间件运行时没有浏览器的Cookie上下文。如果必须在服务端中间件获取Cookie,需要通过event.node.req.headers.cookie手动解析,但这类场景更适合用Nuxt官方的Auth相关模块处理。
内容的提问来源于stack exchange,提问作者DuchSuvaa
相关产品推荐
相关产品推荐

