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

Nuxt3中getCookie()为何因调用场景不同返回结果不一致?

问题原因及解决方法

你在组件或中间件里用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:05:23