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

Next.js集成Auth.js后,已认证状态下useSession始终返回空用户对象

Next.js集成Auth.js后,已认证状态下useSession始终返回空用户对象

我之前踩过一模一样的坑!你这个情况大概率是没配置JWT和Session的回调函数,导致Auth.js没法把你在authorize里返回的用户数据持久化到Session中。

先给你说最直接的解决办法,在你的auth.ts配置里加上这部分代码:

export const { handlers, signIn, signOut, auth } = NextAuth({
  providers: [
    // 你的Credentials provider配置不变
    Credentials({
        credentials: {
          email: {},
          password: {},
        },
        authorize: async (credentials) => {
          let data = {
            email: credentials.email as string,
            password: credentials.password as string,
          }

          const user = await AuthService.login(data)
          console.log('the user', user)
          return user
        },
    }),
  ],
  // 新增以下配置
  session: {
    strategy: "jwt", // 显式指定session策略为JWT,默认也是这个,但显式写更清晰
  },
  callbacks: {
    // 登录时把用户数据合并到JWT Token里
    async jwt({ token, user }) {
      if (user) {
        // 把你的user对象整个存到token里,或者按需挑字段存
        token.user = user;
      }
      return token;
    },
    // 从JWT Token里取出用户数据,放到Session中
    async session({ session, token }) {
      session.user = token.user as any;
      return session;
    },
  },
})

为什么要加这个?因为用Credentials Provider的时候,Auth.js不会自动把你在authorize里返回的用户数据同步到Session里。你登录时authorize里的user有数据,但后续请求Auth.js不知道从哪里获取这个用户信息,只能告诉你“已经认证了”,但用户数据是空的。

除了加回调,你还要检查这两个点:

  • 确保你的AuthService.login返回的user是一个可序列化的普通对象,不能包含函数、Symbol这类没法转成JSON的内容,不然存到JWT的时候会被自动忽略,导致Session里拿不到。
  • 确认你的SessionProvider已经正确包裹了整个应用(比如在layout.tsx或者_app.tsx里),useSession必须在这个Provider的范围内使用,不然也会拿不到正确的Session数据。

举个正确的Provider配置例子:

// app/layout.tsx
import { SessionProvider } from "next-auth/react";

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="zh-CN">
      <body>
        <SessionProvider>{children}</SessionProvider>
      </body>
    </html>
  );
}

按照这个改完之后,你再用useSession获取的session.user应该就能拿到完整的用户数据了!

备注:内容来源于stack exchange,提问作者ahols

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 07:13:17