Не удается получить доступ к req.пользователь в паспорте.js на экспресс.JS


req.user не доступен нигде, кроме его исходной функции.

Я читал, что passport присоединяет пользователя к каждому запросу после аутентификации.

Я хочу, чтобы любой пользователь не имел доступа к внутренним страницам через url-бар, таким образом пропуская страницу входа в систему, или если его сеанс уже активен, он должен быть перенаправлен на страницу пользователя. Эти две вещи можно сделать только в том случае, если я получу доступ к req.user во всех промежуточных программах.

Приложение.JS Ссылка

Приложение.js: -

app.post('/',passport.authenticate('local',{failureRedirect: '/'}),
function(req,res,next){
console.log(req.user); //req.user defined here only not in users.js
res.redirect('/users');
});

Пользователи.js: -

router.get('/users', function(req, res, next) {
console.log(req.user);//undefined    
res.render('users');
});

DeserializeUser: -

passport.deserializeUser(function(id, done) {
db.findById(id, function(err, user) {
done(err, user);
console.log(user) //undefined 
});
});
2 2

2 ответа:

Не похоже, что ваше приложение настроено на поддержку сеансов, что, как правило, необходимо для Passport, чтобы "запомнить", что пользователь вошел в систему, и заполнить req.user.

Наиболее распространенным промежуточным программным обеспечением сеанса для Express является express-session, и это относительно легко настроить.

Чтобы быстро проверить, не является ли это проблемой, вы можете добавить в свое приложение следующее:

app.use(session({ secret: 'super secret' }));

Убедитесь, что вы добавили его Перед тем, как app.use(passport.session()).

Если это работает, вы должны прочитать: о том, как настроить хранилище сеансов и каковы различные другие параметры промежуточного программного обеспечения сеанса.

Создайте промежуточную функцию с этим: passport.authenticate('local',{failureRedirect: '/'}) в качестве содержимого и используйте ее в каждом маршруте, который вы хотите аутентифицировать. Или используйте его в app.use(that_function) для аутентификации всего приложения