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

如何在Next.js的getServerSideProps()中获取Next-Auth的session用户ID

解决方案

Next-Auth 提供了服务端侧专用的会话获取方法 getServerSession,可以直接在 getServerSideProps 中调用,不需要依赖客户端 Hooks。

实现步骤

  • 首先引入 getServerSession 方法和你项目中 Next-Auth 配置的 authOptions,注意路径要和你项目里存放 [...nextauth] 配置文件的位置对应:
import { getServerSession } from "next-auth/next"
import { authOptions } from "./api/auth/[...nextauth]"
  • 修改 getServerSideProps 逻辑,传入请求上下文获取会话,示例代码如下:
export async function getServerSideProps(context) {
  // 传入上下文和auth配置,服务端侧直接获取会话
  const session = await getServerSession(context.req, context.res, authOptions)
  
  // 可选:无登录态时直接跳转登录页
  if (!session) {
    return {
      redirect: {
        destination: '/api/auth/signin',
        permanent: false,
      },
    }
  }

  const res = await fetch(
    `http://localhost:5000/api/users/${session.id}/following`
  );
  // 注意:res.json是异步方法,需要加await,否则会拿到Promise对象
  const isFollowing = await res.json();
  return {
    props: { isFollowing },
  };
}
  • 补充配置:默认的session返回值不会自带用户id,你需要在authOptions的回调中配置将id存入session:
export const authOptions = {
  // 保留你原本的providers等其他配置不变
  callbacks: {
    async jwt({ token, user }) {
      // 登录时将用户id存入token
      if (user) {
        token.id = user.id
      }
      return token
    },
    async session({ session, token }) {
      // 把token里的id同步到session返回值
      session.id = token.id
      return session
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:15:08