#node.js #express #session-cookies #passport.js
#node.js #экспресс #сеансовые файлы cookie #passport.js
Вопрос:
Мой код каким-то образом вызывал цикл перенаправления. Пользователи, посещающие /account
должны быть перенаправлены /login
, если они не аутентифицированы, и наоборот.
Я использую ensureAuth
как промежуточное программное обеспечение, чтобы проверить, что пользователь вошел в систему. Кажется, что он получает объект запроса ( req
), но req.user
объекта нет, и isAuthenticated()
он всегда возвращает false . Тем не менее, в /login
маршруте тот же isAuthenticated()
метод возвращает true, если пользователь вошел в систему. Это источник цикла перенаправления.
routes.js
var ensureAuth = function(req,res,next){
if (req.isAuthenticated()) { // This always comes out false, even if the user is logged in!
next();
} else {
req.flash('warning', 'You have to log in to do that. ');
res.redirect('/login');
}
};
router.route('/account').get( ensureAuth, function(req,res){
res.render('account.html');
})
auth.js
app.route('/login').get( function(req,res){
if (req.isAuthenticated()){
res.redirect('/account'); }
else { res.render('login.html'); }
})
main.js
// Routes
app.use('/files', express.static(__dirname '/public'));
app.use('/', require('./config/routes.js') );
// Auth
require('./config/passport.js')(passport);
app.use(passport.initialize());
app.use(passport.session());
require('./config/auth.js')(app, passport);
Ответ №1:
Это может помочь другим, которые сталкиваются с проблемами, когда req.isAuthenticated()
всегда возвращается false или req.user
всегда пусто.
В принципе, чтобы получить доступ к сеансу аутентификации, мне просто нужно было позвонить routes.js
после app.use(passport.session())
.
// Auth
require('./config/passport.js')(passport);
app.use(passport.initialize());
app.use(passport.session());
require('./config/auth.js')(app, passport);
// Routes
app.use('/files', express.static(__dirname '/public'));
app.use('/', require('./config/routes.js') );