【问题标题】:express does not set cookies in Production but they are visible in respoonse tabexpress 不会在生产中设置 cookie,但它们在响应选项卡中可见
【发布时间】:2023-01-27 02:22:58
【问题描述】:

我有一个快速应用程序女巫在开发中正常工作。 但是,当我尝试在产品中设置 cookie 时,cookie 在网络选项卡中可见,但不会出现在浏览器中。 我做了一项研究,我认为我涵盖了最常见的问题,但仍未设置 cookie 你可能会看到我的快递应用程序 我确实添加了快速配置文件,我也在这里发布

         const app = require("express")();
            require("./config/express")(app);
            app.disable("x-powered-by");
            app.use((req, res, next) => {
              res.setHeader("Access-Control-Allow-Origin", "example.com");
              res.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS");
              res.setHeader("Access-Control-Allow-Headers", "*");
              res.setHeader("Access-Control-Allow-Credentials", true);
              res.setHeader(
                "Access-Control-Allow-Headers",
                "Origin, X-Requested-With, Content-Type, Accept"
              );
            
              if (req.method === "OPTIONS") {
                // return res.sendStatus(200);
              }
              next();
            });
//express config.js
         const express = require("express");
            const path = require("path");
            const cookieParser = require("cookie-parser");
            const bodyParser = require("body-parser");
            const jwt = require("express-jwt");
            const jwks = require("jwks-rsa");
            const cookieSecret =
              process.env.COOKIESECRET ||
              "aabbcc";
            // const { errorHandler } = require('../utils')
            const expressSession = require("express-session");
            const config = require("../config/config");
            const helmet = require("helmet");
            const morgan = require("morgan");
            
              app.use(express.json());
              app.use(bodyParser.json());
              app.use(bodyParser.urlencoded({ extended: true, limit: "50mb" }));
            
              app.use(cookieParser()); // TRY to use it with secret as in the __express.js file
              app.use(express.static("uploads"));
              app.use(express.static(path.join(__dirname, "static")));
              app.use(express.static(path.resolve(__basedir, "static")));
              app.use("/static/uploads", express.static("static/uploads"));
              app.use("/files", express.static("files"));
              app.use(helmet());
              app.use(morgan("combined"));
            
              // app.use(errorHandler(err, req, res, next));
                 app.use(
                    expressSession({
                      secret:
                        "aabbcc",
                      resave: false,
                      saveUninitialized: true, cookies,
                      cookie: { secure: true, sameSite: "none", domain: 'example.com' }, 
                    })
                  );
                  app.set("trust proxy", 1);
                };

     const expiryDate = new Date(Date.now() + 60 * 60 * 1000);
     res.cookie(authCookieName, token, {
                                          expires: expiryDate,
                                          httpOnly: true,
                                          secure: true,
                                          domain: "example.com",
                                        });
    
                                        res.cookie(secondCookieName, secondToken, {
                                          expires: expiryDate,
                                          httpOnly: true,
                                          secure: true,
                                          domain: "example.com",
                                        });
    
                                        res.status(200).send(user).end();
                                        return;

【问题讨论】:

  • 您发布(并删除)的屏幕截图显示您在 cookie 的 domain 中使用了一个 URL(以 https:// 开头),这是不正确的。它应该是一个域名。

标签: express cookies


【解决方案1】:

经过一番研究,似乎这就是这里的问题

此 Set-Cookie 已被阻止,因为其域属性对于当前主机 URL 无效 这被视为响应标头中的消息。

但我确实设置了所有域的正确性。我尝试使用 https 和不使用它

有没有人遇到过同样的问题?

PS:前端和后端都在主域的子域上运行

backend.maindomain.com - 我的后端 frontend.maindomain.com - 我的前端

maindomain.com - 来自女巫的登陆页面,如果您想使用它,您将被重定向到应用程序前端

【讨论】:

    猜你喜欢
    • 2021-06-21
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多