一旦我将ensureAuthenticated添加到app.use('/',ensureAuthenticated,routes),对http://mydomain.com/的任何调用都会产生404;并且用户已成功通过身份验证。请注意,当用户未经过身份验证时,它的工作正常,用户将被重定向到登录页面。
当用户成功验证并尝试访问主页时可能出现什么问题?
令人惊讶的是,对/ api / *的任何调用在所有情况下都没有任何问题。 我使用快速4.x,节点,护照auth模块与本地策略。
以下是我的代码: app.js:
var routes = require('./routes/index');
var auth = require('./routes/auth');
app.use('/', auth);
app.get('/api/*', ensureAuthenticated, apiHandler.handleApis);
app.post('/api/*', ensureAuthenticated, apiHandler.handleApis);
app.use('/', ensureAuthenticated, routes); //results into 404 for http://host/
//app.use('/', routes); //Everything works great if I replace above line with it
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
console.log('user is authenticated for the request, process id:' + process.pid);
return next();
}
res.redirect('/login12');
}
index.js
router.get('/', function(req, res) {
res.render('index', { title: 'home', name: 'home' });
});
router.get('/home', function(req, res) {
res.render('index', { title: 'home', name: 'home' });
});
module.exports = router;
auth.js
router.post('/api/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) {
return next(err);
}
if (!user) {
return res.send(info);
}
req.logIn(user
, function(err) {
if (err) {
return next(err);
}
return res.send({ output : { result : 'Ok'} });
});
})(req, res, next);
});
router.post('/api/register', function(req, res, next) {
//code to register
});
router.get('/login12', function(req, res) {
console.log('GOING TO login PAGE')
res.render('login', {});
});
module.exports = router;