Я успешно создал систему регистрации с использованием стратегии Github. Мои учетные данные успешно сохранены в моей базе данных. И сессия обрабатывается правильно. По крайней мере, пока пользователь не закроет и не откроет страницу позже;Сессия полностью потеряна (но все еще в базе данных).
Мой passport.deserializeUser был правильно вызван перед закрытием страницы. Но после этого никаких признаков жизни этой функции. Мой request.session.passport пуст (но у меня все еще есть данные Cookie и Flash).
Я что-то пропустил? Как загрузить паспортный сеанс из БД в request.session?
Я также заметил, что паспорт создал два сеанса внутри базы данных при первом входе пользователя в систему. Один полностью пуст от паспортных данных, другой правильно создан с учетными данными пользователя. При первом входе в систему заполненный сеанс используется по паспорту. А после перезагрузки страницы используется пустой сеанс (я сравнил дату истечения срока действия, чтобы узнать, какой сеанс используется запросом).
Я явно пытался без паспорта узнать, был ли мой сеанс плохо настроен, но нет, все другие данные сеанса правильно обрабатываются и сохраняются после закрытия страницы.
app.js
** requiring everything needed (passport, cookie-parser, connect-flash...) **
** Initializing Session, Flash messages using app.use **
** Initializing passport.initialize() and passport.session() using app.use **
//Custom middleware to get user session and pass it to the response.locals for EJS//
function Loginuser(req, res, next){
if(req.session.passport){
res.locals.user = req.session.passport.user;
}
next();
}
app.use(Loginuser);
const Authentification = require('./Controller/Authentification');
app.use(Authentification);
Authentification.js
var GithubStrategy = require('passport-github').Strategy;
passport.use(new GithubStrategy({
clientID: process.env.GITHUB_CLIENT_ID,
clientSecret: process.env.GITHUB_CLIENT_SECRET,
callbackURL: process.env.GITHUB_CALLBACK
},
function(accessToken, refreshToken, profile, next){
FindByGitHubID(profile)
.then(function(user){
return next(null, user);
})
.catch(function(err){
return next(null, false, {message : err});
})
}))
app.get('/auth/github', passport.authenticate('github'));
app.get('/auth/github/callback', passport.authenticate('github', {failureRedirect:'/login'}),
function(req, res){
res.redirect('/');
})
passport.serializeUser(function(user, done){done(null, user);})
passport.deserializeUser(function(user, done){done(null, user);})