【问题标题】:Express-session creates a new session every page loadExpress-session 每次页面加载都会创建一个新会话
【发布时间】:2019-11-04 19:21:21
【问题描述】:

我有一个带有express-session 的 MERN 网络应用程序,我正试图将其部署到 heroku。通过在package.json 文件中设置代理,我使用代理配置了后端请求。当前端和后端都在 localhost 上本地运行时,它可以正常工作。

当我将后端部署到 heroku 时,每次浏览器刷新后,express-session 都会在 mongodb 中创建一个新的会话/文档。

经过大量调试,发现将 axios.defaults.baseURL 设置为后端 url 是导致问题的原因。 (我还是不知道为什么。)

显然,在package.json 中设置代理仅适用于开发,因为当我部署应用程序时,会从前端 url 调用 api。所以在开发过程中,当一切都在 localhost 上运行,并且代理设置在 package.json 中时,一切正常。

问题是,当我设置axios.defaults.baseURL。当我这样做时,每次重新加载页面后,都会重新创建会话。

前端连接后端的正确方法是什么?

Session.js

const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
const mongoose = require('mongoose');

module.exports = function(app) {
    var sess = {
        secret: 'mySecret',
        cookie: { token: null },
        saveUninitialized: false,
        resave: true,
        store: new MongoStore({ mongooseConnection: mongoose.connection })
    };

    if (app.get('env') === 'production') {
        app.set('trust proxy', 1);
        sess.cookie.secure = true;
    }

    app.use(session(sess));
};

Route.js

module.exports = function(app) {
    app.use(cors());
    app.use(helmet());
    require('../middleware/session')(app);
    // Other routes...
};

【问题讨论】:

    标签: node.js reactjs express axios express-session


    【解决方案1】:

    express-session 的工作方式是它在本地保存一个引用 cookie,当您发送请求时,无论是获取、发布、放置还是删除,该请求都会将该 cookie 引用连同请求一起发送到后端. Express-session 然后看到 cookie 引用,然后从数据存储中获取相应的数据,以便您可以在应用程序中使用它。

    设置axios.defaults.baseURL 时,cookie 不会从本地系统发送到后端。发送方式,通过设置:

    axios.defaults.withCredentials = true;
    

    这样可以确保 cookie 被发送过来。一旦你设置好了,那么你将不得不使用 CORS 设置一个特定的origin,并且你不能使用'*'

    【讨论】:

      猜你喜欢
      • 2021-04-21
      • 2017-12-07
      • 2021-05-04
      • 2014-01-15
      • 1970-01-01
      • 2014-04-25
      • 2013-04-24
      • 2021-06-15
      • 1970-01-01
      相关资源
      最近更新 更多