Не удается получить доступ к req.пользователь в паспорте.js на экспресс.JS
req.user
не доступен нигде, кроме его исходной функции.
Я хочу, чтобы любой пользователь не имел доступа к внутренним страницам через url-бар, таким образом пропуская страницу входа в систему, или если его сеанс уже активен, он должен быть перенаправлен на страницу пользователя. Эти две вещи можно сделать только в том случае, если я получу доступ к req.user
во всех промежуточных программах.
Приложение.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 ответа:
Не похоже, что ваше приложение настроено на поддержку сеансов, что, как правило, необходимо для Passport, чтобы "запомнить", что пользователь вошел в систему, и заполнить
req.user
.Наиболее распространенным промежуточным программным обеспечением сеанса для Express является
express-session
, и это относительно легко настроить.Чтобы быстро проверить, не является ли это проблемой, вы можете добавить в свое приложение следующее:
app.use(session({ secret: 'super secret' }));
Убедитесь, что вы добавили его Перед тем, как
app.use(passport.session())
.Если это работает, вы должны прочитать: о том, как настроить хранилище сеансов и каковы различные другие параметры промежуточного программного обеспечения сеанса.