我正在使用带有中间件的passportjs。假设用户在请求某些事情时是否登录。如果他没有登录,则应将其重定向到登录页面。
我的请求路线如下:
app.put('/fantasyteams/:fantasyTeamId', auth.requiresLogin, fantasyteams.update);
当用户尝试更新网站中名为Fantasy Team的资源时,将调用此路由
auth.requiresLogin是一个中间件,如下所示:
exports.requiresLogin = function (req, res, next) {
if (req.isAuthenticated()) {
return next()
}
return res.redirect("/signin");
};
登录我的用户后,我通过删除会话cookie来模拟会话到期。此后通过网站我发布了PUT'/ fantasyteams / 123'请求,以更新幻想团队编号123.
fantasyteams.update只是一个mongodb / mongoose保存操作:
exports.update = function(req, res){
var fantasyteam = req.fantasyteam;
fantasyteam = _.extend(fantasyteam, req.body);
fantasyteam.save(function(err){
res.jsonp(fantasyteam);
});
};
正如预期的那样,上面的路由处理程序(app.put ...)捕获了请求,将其传递给auth.requiresLogin中间件以检查用户是否已登录。结果表明用户未登录因为我删除了他的会话cookie。按预期调用res.redirect。但是,该网站不会重定向到登录页面。我在node.js命令日志中看到了这一点:
PUT /signin 404 328ms
我做错了什么?
答案 0 :(得分:1)
看起来问题是你没有PUT / signin的路由处理程序。原始请求是一个put,所以当它重定向时,它仍然是浏览器发出的同一个'put'请求的一部分。只需为app.all('/ signin')
添加put / post /的处理程序