【问题标题】:Session is stored in mongoDB store but not in the browser during production [SOLVED]会话存储在 mongoDB 存储中,但在生产期间不存储在浏览器中 [已解决]
【发布时间】:2021-07-07 03:25:23
【问题描述】:

概览

//cloudinary
require("dotenv").config();
cloudinary.config({
  cloud_name: "loghorizon",
  api_key: process.env.CLOUDINARY_API_KEY,
  api_secret: process.env.CLOUDINARY_SECRET,
});
require("./config/passport")(passport);

//MongoDB
connectDB();

//---------------------------------- SERVER ----------------------------------
const app = Express();
const httpServer = http.createServer(app);
const io = Socket(httpServer, {
  cors: {
    origin: process.env.CLIENT_SIDE_URL,
    methods: ["GET", "POST"],
    allowedHeaders: ["my-custom-header"],
    credentials: true,
  },
});

app.use(
  cors({
    origin: process.env.CLIENT_SIDE_URL, // allow to server to accept request from different origin
    methods: "GET,HEAD,PUT,PATCH,POST,DELETE",
    credentials: true, // allow session cookie from browser to pass through
  })
);

//----------------------------------  MIDDLEWARE ----------------------------------
// increase bandwidth to allow for base64 strings
app.use(Express.json({ limit: "40mb", extended: true }));
app.use(Express.urlencoded({ limit: "40mb", extended: true }));
app.set("trust proxy", 1);
app.use(
  Session({
    name: "LHsession",
    secret: process.env.COOKIE_SECRET,
    resave: true,
    store: new MongoStore({ mongooseConnection: mongoose.connection }),
    cookie: {
      sameSite: false,
      maxAge: 8.64e7,
      secure: false,
      httpOnly: false,
    },
  })
);
// utility for monitoring requests
app.use(Morgan("dev"));

//---------------------------------- Pasport config ----------------------------------
app.use(passport.initialize());
app.use(passport.session());




问题

该项目在我的开发环境中完美运行(在多台计算机上测试)。引发以下错误: has been blocked by CORS policy: no 'Access-Control-Allow-origin' ...

请务必注意,显示包含帐户的实际授权页面,除非我被重定向回我的网络应用会话,否则不会存储。

我尝试了什么

不用说这些都行不通

  • 我读到添加行 app.set("trust proxy")
app.set("trust proxy", 1);
app.use(
  Session({
    name: "LHsession",
    secret: process.env.COOKIE_SECRET,
    resave: true,
    store: new MongoStore({ mongooseConnection: mongoose.connection }),
    cookie: {
      sameSite: false,
      maxAge: 8.64e7,
      secure: false,
      httpOnly: false,
    },
  })
);
  • 在 Axios 中我添加了 withCredentials
const server = axios.create({
  withCredentials: true,
  baseURL: process.env.REACT_APP_SERVER + "/board",
});

免责声明

  • 我是一个 17 岁的业余爱好者,他可能有点过头了,请把我对网络不存在的知识淡化。也许给我一些材料来阅读。
  • 我检查的环境变量已成功输入
  • 文档可能有点奇怪抱歉
  • 在最终的 react 构建中有很多错误和警告,但我认为这在这里无关紧要

【问题讨论】:

    标签: node.js express heroku cors express-session


    【解决方案1】:

    问题解决了我在我的网站域下注册了这两个,现在它就像一个魅力。没有解决 cors 问题,但仍然设法让我的项目正常工作。此线程上对潜在罪魁祸首进行了更确凿和彻底的调查:Cross-Domain Session Cookie (Express API on Heroku + React App on Netlify)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-18
      • 1970-01-01
      • 2022-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-07
      • 2020-05-05
      相关资源
      最近更新 更多