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

Next.js 13 App目录下服务端组件如何获取getServerSession?

解决Next.js 13 App目录下服务端组件获取serverSession的问题

核心思路是把authOptions从API路由中抽离成独立的可导出配置文件,这样服务端组件和API路由都能复用这个配置。

步骤1:创建独立的auth配置文件

在app/lib目录下新建auth.ts(JavaScript项目用auth.js),定义并导出你的authOptions:

import { NextAuthOptions } from "next-auth";
import GoogleProvider from "next-auth/providers/google";
// 根据需求导入其他登录提供商

export const authOptions: NextAuthOptions = {
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID!,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
    }),
    // 添加其他提供商配置
  ],
  // 可按需添加session策略、回调函数等其他配置
};

步骤2:更新API路由文件

修改app/api/auth/[...nextauth]/route.ts,导入刚才的authOptions并传给NextAuth:

import NextAuth from "next-auth";
import { authOptions } from "@/app/lib/auth";

const handler = NextAuth(authOptions);
export { handler as GET, handler as POST };

注:如果你的项目没配置路径别名@,可以用相对路径导入,比如../../lib/auth

步骤3:在服务端组件中获取session

现在就可以在服务端组件里导入authOptions,调用getServerSession获取会话了:

import { getServerSession } from "next-auth/next";
import { authOptions } from "@/app/lib/auth";

export default async function YourServerComponent() {
  const session = await getServerSession(authOptions);

  return (
    <div>
      {session ? (
        <pre>{JSON.stringify(session, null, 2)}</pre>
      ) : (
        <p>未登录</p>
      )}
    </div>
  );
}

这样就解决了API路由中没有导出authOptions导致服务端组件无法获取的问题,同时实现了配置的复用,避免重复代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:23:22