Next.js不持久化cookie

时间:2019-02-08 04:13:59

标签: cookies next.js

我有一个服务器端呈现的Next.js / express应用,可与Django API通信(跨域)。我这样登录用户:

const response = await fetch('localhost:8000/sign-in', {
                method: 'POST',
                credentials: 'include',
                body: JSON.stringify({ email, password }),
                headers: { 'Content-Type': 'application/json' },
            });
const result = await response.json();
if (response.status === 200) {
    Router.push('/account');
}

Django成功登录用户并返回set-cookiecsrftoken cookie的sessionid标头,但是,当我导航到另一个页面时(例如,当我{ {1}}),cookie不会持久存在。

我认为这与服务器端和客户端有关,但是当在浏览器中设置cookie时,我希望它们持久存在。

一旦设置好这些cookie,如何在客户端的所有页面上持久保存?

1 个答案:

答案 0 :(得分:0)

事实证明,set-cookie是旧的处理方式。它由浏览器控制,因此很模糊。

我最终将csrftokensessionid发送回JSON主体中的客户端,并使用localStoragelocalStorage.setItem('sessionid', 'theSessionId')将它们保存到localStorage.setItem('csrftoken', 'theCsrftoken')

然后,当我需要进行身份验证的请求时,将它们包括在提取标头中:

const response = await fetch(`${API_HOST}/logout`, {
        method: 'POST',
        headers: {
            'X-CSRFToken': localStorage.getItem('csrftoken'),
            sessionid: localStorage.getItem('sessionid'),
        },
    });