表示身份验证中间件在PUT请求后无法正确重定向

时间:2013-09-08 10:08:49

标签: node.js session cookies express passport.js

我正在使用带有中间件的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

我做错了什么?

1 个答案:

答案 0 :(得分:1)

看起来问题是你没有PUT / signin的路由处理程序。原始请求是一个put,所以当它重定向时,它仍然是浏览器发出的同一个'put'请求的一部分。只需为app.all('/ signin')

添加put / post /的处理程序