【问题标题】:get cookies from express res.cookie() in our react app在我们的 React 应用程序中从 express res.cookie() 获取 cookie
【发布时间】:2023-02-03 22:49:41
【问题描述】:

在我的快递中,我使用 res.cookie 来发布一个 cookie

res.cookie("jwt", token, {
        expires: new Date(Date.now() + process.env.COOKIEEX * 24 * 60 * 60 * 1000),
        withCredentials: true,
        httpOnly: false,
    });
    res.status(200).json({
        status: "success",
        user,
        token,
    });

但是当我使用 axios 从我的 React 应用程序向该中间件发送请求时,我在网络 > headers> set-cookie 中找到了 cookie,但它没有在浏览器中设置:

<form
            onSubmit={async (e) => {
                e.preventDefault();
                const res = await axios.post(
                    "http://127.0.0.1:3000/api/v1/users/login",
                    {
                        email: "na@test.test",
                        password: "password@",
                    },
                    { credentials: true }
                );
            }}
        >

我还尝试设置 samesit=None 和安全,它的工作原理,我可以在浏览器中看到 cookie,但在刷新页面后它消失了:

res.cookie("jwt", token, {
        expires: new Date(Date.now() + process.env.COOKIEEX * 24 * 60 * 60 * 1000),
        withCredentials: true,
        httpOnly: false,
                sameSite:"None",
                secure:true
    });

【问题讨论】:

    标签: node.js reactjs http cookies


    【解决方案1】:

    浏览器越来越不可能通过 HTTP 包含 cookie,相反,您应该尝试仅在涉及浏览器时使用 HTTPS。

    Samesite=none;secure 仅适用于 HTTPS,不会包含在 HTTP 请求中。当您不包含任何 samesite 时,默认设置为 Lax(我认为),这意味着它不会包含在对不同站点的 POST 请求中。要使用 cookie 进行跨站请求,您需要设置 samesite=none;secure 并使用 HTTPS。

    【讨论】:

      【解决方案2】:

      据我所知,当您使用 cookie 时,后端(在您的情况下表示)处理浏览器中 cookie 的设置 [SESSION],换句话说,您只需要在前端应用程序中设置 { credentials: true } ,保存在浏览器上的令牌在逻辑上保存在您的数据库中,因此无论何时收到请求,都会检查数据库是否两个令牌匹配[来自req的令牌和一个保存在您的D B ]。

      因此,如果您只需要包含在您的令牌中的东西,那么主要地,或者我知道它是不可获取的,只需明确发送它。

      【讨论】:

        猜你喜欢
        • 2021-01-16
        • 1970-01-01
        • 2021-04-16
        • 2020-01-22
        • 2020-10-13
        • 1970-01-01
        • 1970-01-01
        • 2016-10-29
        • 1970-01-01
        相关资源
        最近更新 更多