【发布时间】:2017-08-17 16:35:55
【问题描述】:
我有两个本地 Node.js 服务器:
我使用 express.js 和 passport.js 进行身份验证。身份验证工作正常,但是如果:
- 我在服务器 1 上登录
- 我在服务器 2 上登录
然后服务器 1 上的会话消失。如何防止这种情况发生?
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);
});
【问题讨论】:
-
请提供一些代码,特别是您处理会话的地方。
-
我相信你必须将会话cookie存储在像Redis这样的外部存储中,并检查每个Node.js服务器内用户会话的有效性。
-
@KayvanMazaheri 添加了代码
-
@Artem session的有效性由passport.js检查,你能提供更多细节吗?
标签: node.js session express passport.js