У меня есть следующее простое LocalStrategy ...
passport.use(new LocalStrategy(
function(username, password, done){
console.log(`Checking the user and password`);
if(username === "user" && password === "password"){
console.log("Correct!");
return done(null, true);
}
return done(null, false);
}
));
passport.serializeUser(function(user, done) {
console.log(`User is ${user}`);
done(null, user);
});
passport.deserializeUser(function(user, done) {
console.log(`Deserialize User is ${user}`);
done(null, user);
});
Тогда у меня есть следующее промежуточное ПО ....
const checkAuth = (req, res, next) =>{
console.log(`Passport is ${JSON.stringify(req.session.passport)}`);
console.log(`Is Auth ${req.isAuthenticated()}`);
if(req.path === '/login' || req.isAuthenticated()){
console.log("Authenticated");
return next();
}
res.redirect('/login');
};
...
this.express.use(checkAuth);
Когда я запускаю это и авторизируюсь с user
password
Я получаю следующее ...
Passport is undefined
Is Auth false
Authenticated
Это POST для входа в систему, поэтому он считается аутентифицированным, независимо от того, что выглядит правильно, однако после этого мы видим, что пароль проверен и он веренно сеанс по-прежнему не определяет объект паспорта, поэтому он перенаправляет обратно на вход в систему ...
Checking the user and password
Correct!
Passport is undefined
Is Auth false
...
Кажется, что сеанс не имеет ничего сохраненного после возврата ...
{"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"}}
Вот как я устанавливаю сеанс ...
this.express.use(session({
secret: 'keyboard cat',
saveUninitialized: true,
resave: true
}));
this.express.use(passport.initialize());
this.express.use(passport.session());
Почему аутентифицируется как ложное и как его правильно установить?