首页  >  问答  >  正文

Express后端在使用CORS和Cookie-Parser接收子域名Cookie时遇到问题

<p>我目前正在开发一个MERN(MongoDB、Express、React、Node.js)应用程序,我在Express后端中遇到了从子域接收cookie的问题。我已经设置了CORS和cookie处理,当使用简单的localhost来源时,一切正常,但是在处理子域时遇到了困难。</p> <p>以下是我所采取的步骤和我所面临的问题的摘要:</p> <p><strong>在登录时设置cookie:</strong></p> <pre class="brush:php;toolbar:false;">res.cookie("token", token, { httpOnly: true, sameSite: "none", path: "/", secure: true, });</pre> <p>当我尝试使用cors设置来获取这个cookie时,其中origin为:</p> <pre class="brush:php;toolbar:false;">app.use( cors({ origin: "http://localhost:3000", credentials: true, }) );</pre> <p>但是在测试时,当我使用子域origin时,如下所示:</p> <pre class="brush:php;toolbar:false;">app.use( cors({ origin: "http://binbros.localhost:3000", credentials: true, }) );</pre> <p>前端的CORS没有错误,并且在前端成功创建了cookie。但是当我尝试使用这个CORS设置来访问cookie时,我却没有收到任何cookie。但是使用相同的方法和CORS设置到简单的localhost时,我可以正常获取所有的cookie,没有任何问题。</p> <p><code>console.log(req.cookies);</code></p> <p>P.S: 当我在localhost上并且origin是localhost时, 并且我记录cookie, 我可以获取所有的前端cookie,而不仅仅是我在后端创建的那个 但是 当我在子域的origin上时,我在后端甚至都没有收到一个cookie, 既没有我创建的,也没有来自前端的任何一个</p>
P粉665427988P粉665427988452 天前472

全部回复(1)我来回复

  • P粉244730625

    P粉2447306252023-08-15 09:07:40

    在像subdomain.localhost这样的开发环境中使用子域名时,由于浏览器安全策略的限制,可能会遇到额外的挑战。浏览器通常将不同的子域名视为独立的来源,这可能会影响到cookie和CORS的行为。

    在开发环境中,secure属性最好设置为false

    res.cookie("token", token, {
        httpOnly: true,
        sameSite: "none",
        path: "/",
        secure: false,
      });

    检查你的系统hosts文件:

    127.0.0.1 binbros.localhost

    在前端检查是否从binbros.localhost域名调用API,并检查Access-Control-Allow-Credentials

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials

    回复
    0
  • 取消回复