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的cookiesprop,改为返回空对象{},彻底避免序列化错误。 - 使用解析函数提取具体的 cookie,只在目标邮箱 cookie 存在时才重定向,逻辑更准确。
- 重定向时不需要返回
props,因为重定向会优先触发,props 不会被使用。
内容的提问来源于stack exchange,提问作者Julia
相关产品推荐
相关产品推荐

