代码之家  ›  专栏  ›  技术社区  ›  cph2117

next.js不保存cookie

  •  0
  • cph2117  · 技术社区  · 7 年前

    我有一个服务器端呈现的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 sessionid 但是,当我导航到另一个页面时(就像在上面的代码中 Router.push ),饼干不会持续。

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

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   cph2117    7 年前

    结果发现 set-cookie 是做事情的老方法。它由浏览器控制,所以很模糊。

    我最后把 csrftoken sessionid 返回到json主体中的客户机,并将它们保存到 localStorage 使用 localStorage.setItem('sessionid', 'theSessionId') localStorage.setItem('csrftoken', 'theCsrftoken') .

    然后,当我需要发出经过身份验证的请求时,我会将它们包含在fetch头中:

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