我在下面使用带有中间件的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
我做错了什么?