Паспорт не загружает request.session из базы данных после закрытия страницы - PullRequest
0 голосов
/ 23 октября 2019

Я успешно создал систему регистрации с использованием стратегии 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);})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...