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

Next.js预渲染报错:/home页面auth解构失败致Vercel构建终止

问题描述

我将应用根目录的入口文件用作数据层,通过getServerSession获取会话信息实现页面重定向:无会话时重定向至/home页面。但Vercel构建时出现预渲染错误,报错显示预渲染/home页面时无法解构未定义对象的auth属性,导致构建终止。

相关代码

import { NextRequest, NextResponse } from "next/server";
import { getToken } from "next-auth/jwt";

export async function proxy(req: NextRequest) {
  const token = await getToken({req: req as any});

  if (!token || !token.role) {
    return NextResponse.redirect(new URL("/home", req.url));
  }

  return NextResponse.next();
}

export const config = {
  matcher: ["/"]
}


"use server";

import { authOptions } from "@vendora/auth";
import { getServerSession } from "next-auth";
import { redirect } from "next/navigation";


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

  if (!session?.user.role) {
    redirect("/onboarding")
  }

  switch (session.user.role) {
    case "buyer":
      redirect(process.env.NEXT_PUBLIC_STORE_URL as string);
    case "seller":
      redirect(process.env.NEXT_PUBLIC_SELLER_URL as string);
    case "admin":
      redirect(process.env.NEXT_PUBLIC_ADMIN_URL as string);
    default:
      redirect("/home")
  }
}

报错详情

生成静态页面(0/27)... 生成静态页面(6/27) 预渲染页面"/home"时出错。
TypeError: 无法解构未定义对象'a'的属性'auth'。
at f (.next/server/chunks/711.js:17:51199)
at p (.next/server/chunks/711.js:1:41685)
at (.next/server/chunks/711.js:1:42254)
at q (.next/server/chunks/711.js:1:42235) { digest: '3188648309' }

导出时在/home/page页面遇到错误:/home,终止构建。
⨯ Next.js构建进程退出,代码:1,信号:null
ELIFECYCLE  命令执行失败,退出码1。错误:命令"pnpm run build"退出码为1

解决方案
  1. 排查/home页面的代码逻辑
    报错核心是/home页面预渲染时尝试解构未定义的auth对象,先检查/home/page.tsx(对应页面文件)中的相关代码,确保访问auth属性前先判断对象是否存在。比如:

    // 错误写法:直接解构未定义对象
    const { auth } = someUndefinedValue;
    // 修复写法:可选链判断存在性
    const auth = someValue?.auth;
    
  2. 调整重定向逻辑,避免循环预渲染冲突
    当前根目录的proxy函数无token时跳/home,而Index函数无会话时跳/onboarding,逻辑存在冲突。建议统一规则:

    • 若/home是公开页面,确保它不依赖任何会话相关的逻辑,避免预渲染时因无会话触发错误;
    • 若/home需要会话,修改根目录重定向逻辑,无会话时直接跳登录页而非/home。
  3. 标记/home页面为动态渲染
    如果/home页面依赖用户会话(属于动态内容),在页面文件中添加配置,禁用预渲染:

    // 在/home/page.tsx中添加
    export const dynamic = "force-dynamic";
    
  4. 验证authOptions配置完整性
    检查@vendora/auth导出的authOptions是否正确配置了session、providers等核心字段,确保getServerSession能正常返回会话数据,避免因返回undefined导致后续逻辑报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 00:05:15