【问题标题】:Problem with connect.sid and session in a node.js application, in production environment生产环境中 node.js 应用程序中 connect.sid 和会话的问题
【发布时间】:2020-05-02 06:54:03
【问题描述】:

节点应用程序使用passport-ldap 进行身份验证,问题是它在开发环境中就像一个魅力,但在生产环境中存在问题。当路由改变时,我失去了用户的会话,因为应用程序的 connect.sid(cookie)正在改变,因为我有一个新的 setCookie 响应。

我正在使用 express 4.17.1express-session 1.16.2,所以从我的研究中我发现我不必使用 cookieParser。我也认为用户和护照功能的序列化和反序列化没有问题。

// Static folder set
app.use(express.static(path.join(__dirname, 'public')));

// Body parser middleware

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());


app.set('trust proxy', 1) //trust first proxy

// Express session midleware 
app.use(session({
  secret: 'abc',
  resave: true,
  saveUninitialized: true,
  cookie: { secure: true }
}));

// Passport middleware
app.use(passport.initialize());
app.use(passport.session());

...

// Use routes of the application
app.use('/users', users);

【问题讨论】:

    标签: node.js express passport.js session-cookies


    【解决方案1】:

    我找到了解决方案并将其发布以供将来参考,以防其他人遇到类似问题。

    我使用了 cors 模块并像这样设置它

    app.use(cors({credentials: true}));

    同样在生产环境中,您必须使用存储来保存 cookie。这很明显,但我错过了。所以我用了

    const MongoStore = require('connect-mongo')(session);
    
    app.use(session({
      secret: 'abc',
      resave: false,
      saveUninitialized: false,
      cookie: { secure: true,
        maxAge:  6*60*60*1000 },
      store: new MongoStore({ mongooseConnection: mongoose.connection })
    }));
    

    【讨论】:

      猜你喜欢
      • 2017-09-16
      • 1970-01-01
      • 2018-12-01
      • 2011-01-26
      • 1970-01-01
      • 2021-10-06
      • 2020-02-05
      • 2010-12-10
      • 1970-01-01
      相关资源
      最近更新 更多