我用
给401 Uanthourised access头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 :(得分:1)
如果您对调用哪个函数有任何疑问,那么一个好的方法是(临时)在该函数中添加console.log()。我经常会这样做:
console.log('filename.js - functionname() called with args: [%s] [%s]', arg1, arg2);
然后在日志中查看有关已发射的内容以及您要观看的变量的信息。
可能需要重定向而不是渲染401相关代码。
res.redirect('/login');
(编辑)的
答案 1 :(得分:0)
如果您没有提供任何方法,控制器将始终转到“索引”。 它是“POST”的原因可能是您尝试将表单发送到索引页面。 如果您只是请求索引页面。例如“(url)/ login / index”或只是“(url)/ login”那么它将是一个“GET”请求,但是你想告诉我什么,我完全不理解你的问题