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

Next.js登录页Cookie校验重定向遇序列化错误,求解决方案

问题分析与解决方案

错误原因

你遇到的序列化错误是因为当用户未登录时,context.req.headers.cookie 为 undefined,而你将这个 undefined 值作为 props 返回了。Next.js 要求从 getServerSideProps 返回的 props 必须是可序列化为 JSON 的值,undefined 不被 JSON 支持,因此抛出了该错误。

另外,你的代码仅通过判断是否存在 cookies 就进行重定向,逻辑不够严谨——可能存在其他无关 cookies,导致未登录用户被错误重定向。正确的做法应该是检查你登录后设置的特定邮箱 cookie是否存在。

修复后的代码

先添加一个解析 cookies 的辅助函数,再检查特定的登录凭证 cookie:

function parseCookies(cookieHeader) {
  if (!cookieHeader) return {};
  return cookieHeader.split(';').reduce((acc, cookie) => {
    const [name, value] = cookie.trim().split('=');
    acc[name] = decodeURIComponent(value);
    return acc;
  }, {});
}

export async function getServerSideProps(context) {
  const cookies = parseCookies(context.req.headers.cookie);
  
  // 检查你登录后设置的邮箱cookie(替换成你实际的cookie名称)
  if (cookies.userEmail) {
    return {
      redirect: {
        permanent: false,
        destination: "/dashboard",
      }
    };
  }
  
  // 未登录时返回空props,避免传递undefined
  return {
    props: {}
  };
}

关键调整说明

  • 移除了返回 undefined 的 cookies prop,改为返回空对象 {},彻底避免序列化错误。
  • 使用解析函数提取具体的 cookie,只在目标邮箱 cookie 存在时才重定向,逻辑更准确。
  • 重定向时不需要返回 props,因为重定向会优先触发,props 不会被使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:01:04