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

调用getServerSession触发next-auth实验性API警告的问题求助

问题描述

我在Node.js环境下的Express中间件中执行以下代码,用于和前端通信:

app.use(
  '/',
  cors<cors.CorsRequest>({
    origin: 'http://localhost:3000',
    credentials: true,
  }),
  // 50mb 是 `startStandaloneServer` 默认的限制,可按需调整
  bodyParser.json({ limit: '50mb' }),
  // expressMiddleware 接受和Apollo Server一致的参数:
  // Apollo Server实例和可选配置项
  expressMiddleware(server, {
    context: async ({ req }) => {
      const session = await getServerSession(req);
      console.log("API SESSION: ", req.headers.cookie.match('(session-token)'));
      
      // token: req.headers.token,
      return {}
    },
  }),
);

但运行时出现如下警告:

[next-auth][warn][EXPERIMENTAL_API]
`getServerSession` is used in a React Server Component.

我试过改用getSession(),但问题依旧。

解决方案

getServerSession和getSession都是NextAuth为Next.js专属环境(比如Server Component、App Router路由处理器、Pages API路由)设计的方法,你现在是在纯Express的Apollo中间件里调用,环境不匹配才会触发警告。

要在Express环境中获取NextAuth的session,直接手动解析请求中的session token即可:

  1. 先从请求的Cookie中提取NextAuth的session token(默认cookie名是next-auth.session-token,如果自定义过配置就用你设置的名字)
  2. 使用NextAuth的JWT工具或者你配置的session存储(比如数据库)来验证并解析token,拿到session数据。

示例代码:

import { jwtVerify } from "next-auth/jwt";

// 在你的expressMiddleware context里替换原来的getServerSession调用
context: async ({ req }) => {
  // 从cookie中提取session token
  const sessionToken = req.cookies['next-auth.session-token'];
  
  if (!sessionToken) {
    // 没有token,返回空session
    return { session: null };
  }

  // 验证并解析token,这里的secret要和你NextAuth配置里的NEXTAUTH_SECRET一致
  const session = await jwtVerify(sessionToken, {
    secret: process.env.NEXTAUTH_SECRET
  });

  console.log("API SESSION: ", session);
  return { session };
},

注意:

  • 确保你安装了next-auth依赖,并且环境变量NEXTAUTH_SECRET和NextAuth配置中的一致
  • 如果你的session不是存在JWT里(比如用了数据库存储),那需要直接查询对应的session表,用sessionToken去匹配获取数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:34:57