Я использую паспорт-ldapauth для аутентификации ldap. В первый раз, когда любой действительный пользователь (который был определен в ldap) входит в систему, он выдает сообщение «Ошибка: не удалось сериализовать пользователя в сеанс». Последующие попытки входа в систему от того же пользователя являются успешными. Я вижу, что база данных успешно хранит информацию о пользователе, но не уверен, почему serializeUser дает сбой в первый раз, любой пользователь входит в систему.
serializeUser и deserializeUser определены следующим образом.
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
const user = db.get('users').find({id: id}).value()
done(null, user)
});
app.post('/login', (req, res, next) => {
passport.authenticate('ldapauth', (err, user, info) => {
if (err) {
return next(err)
}
if (!user) {
const msg = info.message
return res.redirect('login?info=' + msg)
}
if (user.memberOf.includes('Admins')) {
req.logIn(user, (err) => {
if (err) {
return next(err)
}
return res.redirect('/tool')
})
}
if (!user.memberOf.includes('Admins')) {
return res.send('You do not have the necessary privileges to access this')
}
})(req, res, next);
})