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

NextAuth无法将含角色的完整用户信息传递至客户端

解决NextAuth客户端无法获取角色字段的问题

问题出在你只配置了jwt回调,但未配置session回调来将JWT中的role字段映射到会话对象中。当使用JWT会话策略时,客户端能拿到的会话数据由session回调的返回值决定,默认不会包含自定义字段。

修改你的callbacks配置,添加session回调即可:

callbacks: {
  jwt(params) {
    if (params.user?.role) {
      params.token.role = params.user.role;
    }
    console.log("jwt", params);
    return params.token;
  },
  session(params) {
    // 将token中的role字段赋值给session.user
    if (params.session.user && params.token.role) {
      (params.session.user as any).role = params.token.role;
    }
    return params.session;
  },
},

补充说明

  • jwt回调的作用是把用户角色存入JWT Token,这部分你已经实现正确
  • session回调会在客户端每次请求会话数据时触发,必须在这里手动将Token中的自定义字段(比如role)添加到返回的session.user对象里,客户端才能通过session.user获取到该字段

如果想获得更安全的类型提示,避免使用as any,可以扩展NextAuth的类型定义:

在项目根目录创建types/next-auth.d.ts文件:

import NextAuth from "next-auth";

declare module "next-auth" {
  interface User {
    role: "user" | "admin";
  }

  interface Session {
    user: User;
  }
}

declare module "next-auth/jwt" {
  interface JWT {
    role: "user" | "admin";
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:45:12