我有一个服务器端呈现的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-cookie
和csrftoken
cookie的sessionid
标头,但是,当我导航到另一个页面时(例如,当我{ {1}}),cookie不会持久存在。
我认为这与服务器端和客户端有关,但是当在浏览器中设置cookie时,我希望它们持久存在。
一旦设置好这些cookie,如何在客户端的所有页面上持久保存?
答案 0 :(得分:0)
事实证明,set-cookie
是旧的处理方式。它由浏览器控制,因此很模糊。
我最终将csrftoken
和sessionid
发送回JSON主体中的客户端,并使用localStorage
和localStorage.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'),
},
});