next.js Cookie部分在Reactjs中无法正常工作

ldioqlga  于 2022-12-18  发布在  React
关注(0)|答案(1)|浏览(161)

我正在使用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,
    },
  };
}
snvhrwxg

snvhrwxg1#

这个错误很清楚地说明了Next.js拒绝呈现页面的原因:您试图为.cookies返回undefined(可能在最下面的返回中的props中),这是不可序列化的,因为在JSON. stringify中省略了未定义的值。
例如,您可以通过在浏览器控制台中运行console.log(JSON.stringify({cookies: undefined}));来尝试,这将打印一个空对象。

  • 至于为什么cookies是未定义的,这是您必须弄清楚的; Sumit评论很可能是准确的!*

现在,为了方便起见,这个错误还告诉您该怎么做:要么不包含cookie属性,要么确保它为null。
对于后者,您可以执行以下操作:

return {
  props: {
    cookies ?? null,
  },
};

这将确保未定义的值将被转换为null,null值将保持为null,空字符串将保持为空字符串 (有关零合并操作符的更多信息,请查看here
现在我认为包含cookies属性是不明智的,因为在这个实现中,它总是falsy(即空字符串、未定义或null),作为一个prop可能没有多大帮助,因为你已经知道用户没有登录,所以你可以只返回一个空props对象。
旁注:继续操作时,请确保您确实在检查cookie的值。目前,我可以通过自己作为用户创建cookie来“登录”。

相关问题