node.js - 两个本地 Node.js 服务器上的 session

标签 node.js session express passport.js

我有两个本地 Node.js 服务器:

  1. http://localhost:3000

  2. http://localhost:3001

我使用express.js和passport.js进行身份验证。身份验证工作正常,但是如果:

  1. 我登录服务器 1
  2. 我登录服务器 2

然后服务器 1 上的 session 消失。如何防止这种情况发生?

app.use(bodyParser());
app.use(cookieParser());
app.use(session({
secret: '12345',
resave: true,
saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());


passport.use(new LocalStrategy(
function(username, password, done) {
  users.getActiveByUsername(username, function(err, user) {
    if (err) {console.log(err); return done(err); }
    if (!user) {
      return done(null, false, { message: 'Incorrect username' });
    }
    if (user.password != password) {
      return done(null, false, { message: 'Incorrect password' });
    }
    return done(null, user);
  });
}
));

passport.serializeUser(function(user, done) {
done(null, user);
});

passport.deserializeUser(function(user, done) {
done(null, user);
});

app.post("/login", jsonParser, function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
  if (err) { return next(err); }
  if (!user) { res.status(400).send('Wrong username or password');return; }
  req.logIn(user, function(err) {
    if (err) { return next(err); }
    return res.json({'success':'Successful login'});
  });
})(req, res, next);
});

最佳答案

我假设您的两个应用程序使用相同的数据库。

默认情况下,您无法将具有相同主机名的不同应用的 session 保存在同一数据库上。您必须通过使用不同的名称或前缀来区分它们。

如果您使用 express-session 来处理 session ,您可以通过选项设置不同的名称:

app.use(session({
  secret: '12345',
  resave: true,
  saveUninitialized: true,
  name: 'app1'          // use a different name for the second app
}));

阅读official documentation express-session 了解更多信息。

Note
if you have multiple apps running on the same hostname (this is just the name, i.e. localhost or 127.0.0.1; different schemes and ports do not name a different hostname), then you need to separate the session cookies from each other. The simplest method is to simply set different names per app.

关于node.js - 两个本地 Node.js 服务器上的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45729698/

相关文章:

php - 如何格式化括号部分中的 session 变量

angularjs - 2个应用程序之间的 session 处理

javascript - NodeJS::TypeError:无法读取未定义的属性 'first_name'

node.js - 如何在 Node.js 中过滤 JSON 中的键?

node.js - 如何在 Node.js 中强制同步?

session - pyspark 按用户标识计算 session 持续时间组

html - 背景图像 : url() does not work when you open the html by an express app

node.js - Mongoose 流 JSON 数据

node.js - 如何在所有文件的 express.js 4.x 上启用 CORS?

javascript - ExpressJS 到 ejs,出现 HTTP 500 错误