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

Nuxt Auth登录无法识别Django SimpleJWT返回的Token问题

解决Nuxt Auth无法识别Django SimpleJWT返回Token的问题

核心问题在于Nuxt Auth的local策略配置和Django SimpleJWT的Token返回结构不匹配,再加上配置里的小错误,导致登录功能失效。下面一步步帮你修复:

1. 清理重复的Logout配置

你的endpoints里重复定义了两次logout字段,这会导致配置冲突,先删掉其中一个冗余项:

// 错误的重复配置
logout: false,
logout: { url: '/api-token-logout', method: 'post' },

// 保留正确的一项即可
logout: { url: '/api-token-logout', method: 'post' },

2. 正确匹配Token字段

Django SimpleJWT返回的是access(访问令牌)和refresh(刷新令牌)两个字段,你最初配置的propertyName: 'token'无法匹配到access。即使改成'access',还需要明确配置refresh token的存储逻辑——Nuxt Auth需要它来自动刷新过期的访问令牌:

login: { 
  url: '/api-token-auth/', 
  method: 'post', 
  propertyName: 'access', // 对应后端返回的access字段
  refreshTokenPropertyName: 'refresh' // 告诉Nuxt Auth同时存储refresh token
},

3. 调整用户信息端点的请求方法

你配置的user端点用了method: 'post',但通常获取当前用户信息是GET请求(Django DRF的用户详情视图默认也是GET),所以修改为:

user: { 
  url: '/user/', 
  method: 'get', // 改为GET请求
  propertyName: false // 如果后端直接返回完整用户对象,设为false表示直接使用响应体
},

4. 修正Token类型

SimpleJWT要求Authorization头使用Bearer前缀(而非你之前配置的JWT),所以调整tokenType:

tokenType: 'Bearer',

完整的修正后配置

把以上修改整合后,你的auth配置应该是这样:

auth: {
  strategies: {
    local: {
      endpoints: {
        login: { 
          url: '/api-token-auth/', 
          method: 'post', 
          propertyName: 'access',
          refreshTokenPropertyName: 'refresh'
        },
        logout: { url: '/api-token-logout', method: 'post' },
        user: { url: '/user/', method: 'get', propertyName: false }
      },
      tokenRequired: true,
      tokenType: 'Bearer',
      // 可选:开启自动刷新令牌功能(需要后端配置refresh端点)
      refreshToken: {
        enabled: true,
        propertyName: 'refresh',
        url: '/api/token/refresh/', // 对应SimpleJWT的刷新端点
        method: 'post'
      }
    }
  }
}

额外验证点

  • 确保你的/user/端点已经配置了JWT认证(比如添加IsAuthenticated权限类),并且能正确解析Bearer令牌返回用户信息。
  • 登录后检查浏览器localStorage,确认存在auth._token.local(格式为Bearer <access_token>)和auth._refresh_token.local(存储refresh token)。

至于之前返回单一token字段时正常,是因为那时propertyName: 'token'刚好匹配后端返回的字段;而SimpleJWT返回双令牌时,必须明确指定access作为主令牌,同时配置refresh token的处理逻辑才能让Nuxt Auth正常识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:07:36