Nodejs passport:成功验证后的任何重定向都会导致404 Not found

时间:2014-07-02 23:24:30

标签: node.js authentication passport.js passport-local

一旦我将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;

0 个答案:

没有答案