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
相关产品推荐
相关产品推荐

