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

NextAuth getServerSession在Vercel部署环境返回null求助

问题

我正在开发一款使用NextAuth进行身份验证的应用,采用Next.js的App Router。我在路由处理器中依赖getServerSession调用对用户进行身份验证,之后再执行数据库更新操作。该功能在本地运行完全正常,能返回已认证用户的会话,更新操作也顺利执行。但部署到Vercel后,getServerSession返回null。

我查阅了大量相关帖子,尝试了其中提到的所有解决方案,但均未奏效。需要说明的是,我调用的getSession在本地和部署环境中都能正常工作。

调用路由处理器的页面代码

const handleCheckout = async () => {
  if (!session) {
    router.push("/");
  }

  try {
    const res = await fetch(`${API_URL}/orders`, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({
        price: totalPrice,
        products,
        // TODO: Change this to an enum
        status: "not paid",
        userEmail: session?.user.email,
      }),
    });

    const data = await res.json();
    router.push(`/pay/${data.id}`);
  } catch (error) {
    console.log(error);
  }
};

路由处理器代码

// CREATE ORDER
export async function POST(req: NextRequest) {
  // const session = await getAuthSession();
  const session = await getServerSession(authOptions);
  console.log("session: ", session);
  const token = await getToken({ req, secret });
  console.log("token: ", token);

  if (session) {
    try {
      const body = await req.json();

      const order = await prisma.order.create({ data: body });
      return new NextResponse(JSON.stringify(order), { status: 201 });
    } catch (error) {
      console.log(error);
      return new NextResponse(
        JSON.stringify({ message: "A server error has occurred" }),
        { status: 500 }
      );
    }
  } else {
    return new NextResponse(
      JSON.stringify({ message: "You are not authenticated!" }),
      { status: 401 }
    );
  }
}

可能的原因及解决办法

  • Cookie配置问题:检查authOptions中的cookies配置,Vercel生产环境需将secure设为true,同时配置domain为你的Vercel域名(如your-app.vercel.app),避免Cookie无法正常传递。本地开发时secure可设为false,但生产环境必须严格设置。
  • 请求未携带Cookie:前端fetch调用默认不会携带Cookie到跨域请求,即便是同域名部署,也要显式设置credentials属性。修改你的fetch代码:
    const res = await fetch(`${API_URL}/orders`, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      credentials: "include", // 添加此行确保Cookie携带
      body: JSON.stringify({
        // 原有内容不变
      }),
    });
    
  • Vercel环境变量配置错误:检查Vercel控制台是否正确配置了NextAuth必需的环境变量,比如NEXTAUTH_SECRET、NEXTAUTH_URL。自定义域名场景下,NEXTAUTH_URL需手动设置为完整域名(如https://your-custom-domain.com)。
  • authOptions导出与导入问题:确保authOptions从app/api/auth/[...nextauth]/route.ts这类标准路径正确导出,路由处理器中导入路径无误,避免配置未正确初始化导致getServerSession无法识别会话。
  • Token验证异常:查看Vercel日志中token的输出结果。如果token为null,说明Cookie未传递到服务器;如果token存在但session为null,检查authOptions中的session配置,比如strategy是否设置正确,JWT验证逻辑是否存在异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 07:37:30