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

在Nuxt 3应用中获取并设置JWT Token的问题求助

问题分析与解决办法

核心问题:Token获取路径错误

后端将JWT Token放在响应的Cookie头中返回,而非响应体(response.data)内,因此你通过response.data.cookie无法获取到值,返回undefined是必然结果。

正确获取Cookie中的Token

1. 后端配置跨域头(必做)

跨域场景下,浏览器默认限制前端访问Set-Cookie响应头,需让后端添加Access-Control-Expose-Headers: Set-Cookie响应头,否则前端无法读取Cookie相关头信息。

2. 前端修改代码提取Token

axios不会自动解析Cookie,需手动从响应头中提取:

let response = await axios.post('http://localhost:4000/api/client/login', {
    email: this.login.email,
    password: this.login.password
})

// 取出响应头中的Set-Cookie字段
const setCookie = response.headers['set-cookie'];
if (setCookie) {
    // 定位到Token对应的Cookie项(假设Cookie键名为token,需根据实际情况调整)
    const tokenItem = setCookie.find(item => item.startsWith('token='));
    if (tokenItem) {
        // 截取出纯Token值,去除后续的Cookie属性(如expires、path等)
        const token = tokenItem.split(';')[0].split('=')[1];
        if (process.client) {
            window.localStorage.setItem('token', token);
        }
    }
}

Nuxt3中localStorage的注意事项

你提到的Nuxt3默认不允许使用localStorage,本质是SSR模式下服务端不存在window对象。你的代码已通过process.client判断确保仅在客户端执行,这部分逻辑是正确的,无需修改。

更简洁的替代方案:调整后端返回格式

如果可以修改后端代码,建议直接将Token放在响应体中返回,例如:

{
  "token": "your-jwt-token-string"
}

此时前端代码可简化为:

let response = await axios.post('http://localhost:4000/api/client/login', {
    email: this.login.email,
    password: this.login.password
})

const token = response.data.token;
if (process.client) {
    window.localStorage.setItem('token', token);
}

内容的提问来源于stack exchange,提问作者Pedro Souza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:03:08