0

一旦我将 ensureAuthenticated 添加到 app.use('/', ensureAuthenticated, routes);任何对http://mydomain.com/的调用都会导致 404;并且用户已成功通过身份验证。请注意,当用户未通过身份验证时,它可以正常工作,并且用户被重定向到登录页面。

当用户身份验证成功并尝试访问主页时可能会出现什么问题?

令人惊讶的是,任何对 /api/* 的调用在所有情况下都没有任何问题。我正在使用带有本地策略的 express 4.x、node、passport 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;
4

0 回答 0