如何解决会话存储在 mongoDB 存储中,但在生产期间不在浏览器中 [已解决]
概览
- 我编写了一个与 Express API 交互的 React 应用
- 我将 oauth2 与用于授权的快速会话结合使用
- 我部署到 Netlify 的客户端 - https://keen-bhaskara-257c68.netlify.app/
- 这里是存储库:https://github.com/ThevinSilva/loghorizonServer
- 服务器端到 Heroku - https://loghorizon-server.herokuapp.com/
- 这里是存储库:https://github.com/ThevinSilva/loghorizonClient
- 当前的 cors 设置
//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",// 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' ...
重要的是要注意,显示帐户的实际授权页面除非我被重定向回我的 Web 应用会话,否则不会存储。
我尝试了什么
不用说这些都没有用
- 我读到添加了 app.set("trust proxy") 行
app.set("trust proxy",})
);
- 在 Axios 中我添加了 withCredentials
const server = axios.create({
withCredentials: true,baseURL: process.env.REACT_APP_SERVER + "/board",});
- 我阅读了许多线程,这个看起来很有希望并且可能会起作用,但我希望客户端和服务器是分开的 - express session not persisting after deploying to heroku and netlify
免责声明
- 我是一个 17 岁的业余爱好者,他可能有点不知所措,请把我对网络的了解不存在的事情抛诸脑后。给我一些材料,或许可以阅读。
- 我检查的环境变量输入成功
- 文档可能有点奇怪,抱歉
- 在最终的 React 版本中有许多错误和警告,但我认为这在这里无关紧要
解决方法
问题解决了我在我网站的域下注册了两个,现在它就像一个魅力。没有解决 cors 问题,但仍然设法让我的项目工作。此线程上对潜在罪魁祸首进行了更确凿和彻底的分析:Cross-Domain Session Cookie (Express API on Heroku + React App on Netlify)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。