我正在使用Reactjs和Nextjs。现在我正在使用登录模块。在获得正确的凭据后,我将用户电子邮件保存在“cookie”中。一切正常,但我希望只向尚未登录的用户显示登录页面。
换句话说,我想如果用户已经登录,并试图打开登录页面,被重定向到“ Jmeter 板”页面。我尝试了以下代码,但它给我以下错误:
Error serializing .cookies returned from getServerSideProps Reason: undefined cannot be serialized as JSON. Please use null or omit this value.
我尝试使用以下服务器端代码
export async function getServerSideProps(context: { req: { headers: { cookie: any; }; }; }) {
const cookies = context.req.headers.cookie;
if (cookies) {
return {
redirect: {
permanent: false,
destination: "/dashboard",
},
props:{},
};
}
return {
props: {
cookies,
},
};
}
1条答案
按热度按时间snvhrwxg1#
这个错误很清楚地说明了Next.js拒绝呈现页面的原因:您试图为
.cookies
返回undefined
(可能在最下面的返回中的props
中),这是不可序列化的,因为在JSON. stringify中省略了未定义的值。例如,您可以通过在浏览器控制台中运行
console.log(JSON.stringify({cookies: undefined}));
来尝试,这将打印一个空对象。cookies
是未定义的,这是您必须弄清楚的; Sumit评论很可能是准确的!*现在,为了方便起见,这个错误还告诉您该怎么做:要么不包含cookie属性,要么确保它为null。
对于后者,您可以执行以下操作:
这将确保未定义的值将被转换为null,null值将保持为null,空字符串将保持为空字符串 (有关零合并操作符的更多信息,请查看here)。
现在我认为包含
cookies
属性是不明智的,因为在这个实现中,它总是falsy(即空字符串、未定义或null),作为一个prop可能没有多大帮助,因为你已经知道用户没有登录,所以你可以只返回一个空props对象。旁注:继续操作时,请确保您确实在检查cookie的值。目前,我可以通过自己作为用户创建cookie来“登录”。