2015-04-03 54 views
-3

我给401 Uanthourised ACCES与render() - 它如何加载控制器?

module.exports = function() { 

    return function(req, res, next) { 

     if (!req.isAuthenticated()) { 
      res.status(401); 
      console.log('Unauthorized'); 

      res.render('login.html', { csrfToken: req.csrfToken() }); 

      return; 
     } 

     next(); 
    }; 
}; 

现在login.html头是一个视图通过完全地不同控制器处理:

var passport = require('passport'); 
var config = require(__dirname + '/../lib/config'); 

module.exports = function (router) { 

    router.get('/', function (req, res) { 
     // Error flash messages 
     var errorFlash = req.flash('error'); 
     if (errorFlash && errorFlash.length) { 
      res.locals.error = errorFlash; 
     } 
     res.render('login.html', { csrfToken: req.csrfToken() }); 
    }); 

    router.post('/', 
     passport.authenticate('local', { 
      failureRedirect: '/login/', 
      failureFlash: true 
     }), 
     function(req, res) { 
      res.cookie(config.cookie.name, req.user.email, { signed: true, maxAge: 1234 }); 
      res.redirect('/'); 
     } 
    ); 

}; 

我关心的是我如何能确保登录控制器火起来的哪一部分? render('index.html')以某种方式在索引控制器中挂接到router.post(),并且登录表单像往常一样处理。这怎么可能?

+0

原因减去或没有发生 – 2015-04-08 10:47:31

+1

我认为减号'是因为这个问题令人困惑。 'render('index.html')'会返回一个视图(可能在'views/index.html'中)。您包含的第二个代码段处理到GET /和POST /路由的路由。为了回答你的问题,这个视图(你没有在上面显示)应该与'router.post()'连接起来。 如果这不能说明问题,请重新提出您的问题! – olan 2015-04-10 19:18:30

回答

0

控制器会经常去“索引”,如果你没有提供任何方法。 它是“POST”的原因可能是您尝试将表单发送到索引页面。 如果您只是请求索引页面。例如“(网址)/登录/索引”或只是“(网址)/登录”,那么这将是一个“GET”请求,但你想告诉什么,我完全不明白你的问题

1

如果您有任何疑问,正在调用哪个函数,那么一个好方法是在该函数中(临时)添加一个console.log()。我会经常做这样的事情:

console.log('filename.js - functionname() called with args: [%s] [%s]', arg1, arg2); 

然后观察日志以获取关于什么被解雇以及您想要观察哪些变量的信息。

可能是因为您需要重定向而不是在您的401相关代码中呈现。

res.redirect('/login'); 

(编辑)

+0

应重定向到路由,而不是文件 – 2015-04-07 19:48:06