如何读取 Next.js 中 getStaticProps 和 getStaticPaths 中的 cookie

Maz*_*ino 6 cookies next.js

我无法读取getStaticPaths和中的 cookie getStaticProps,在 SSR 中,我可以通过上下文请求 cookie,但即使使用诸如 之类的包js-cookie, cookie-cutter, cookies,我也无法读取 cookie 集,这使得无法获取数据。

曲奇饼

这是我想要获得的令牌,我httpOnly为了开发而删除了它。

export async function getStaticPaths(){
    const data = await callApi("/jobs", "GET", token)

    const paths = data.map(jobs => ({
        params: {slug: jobs.slug}
    }))
    return{
        paths,
        fallback: true,
    }
}
Run Code Online (Sandbox Code Playgroud)

这是 getStaticPaths。

小智 8

getStaticPaths都是getStaticProps在服务器(node.js)上运行的方法,因此浏览器 API cookie 尚不可用

  • @Mazino请注意,在服务器上运行并不是您无法访问“getStaticProps”中的cookie的实际原因 - 这是因为“getStaticProps”仅在构建时运行,并且无法访问特定于请求的数据。`getServerSideProps` 也在服务器上运行,但因为它在每个请求上运行,所以它确实可以通过请求标头访问 cookie。 (11认同)

fra*_*cis 6

Cookie 既可以在服务器上访问req.cookiesreq.headers.cookie也可以在客户端上访问document.cookie。但与getServerSideProps在运行时生成 HTML 的情况不同,它getStaticProps是在构建时生成 HTML 的,因此不知道请求设备/浏览器的情况。从请求发送时用户代理的外观可以明显看出getStaticProps

'user-agent': 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)'
Run Code Online (Sandbox Code Playgroud)

此外,这里还有一个演示应用程序,展示了这一切是如何工作的。

如果您尝试访问 cookie 的原因getStaticProps是为了身份验证,请查看这篇关于他们构建 zeit.co/vercel 仪表板的方式(完全静态)的文章

同样在这里,使用next-redux-wrapper访问状态getStaticProps