1

我正在尝试编写用于身份验证的中间件。如果用户未登录,我希望此 if 语句将用户重定向到。如果'/'他们登录,我不想将他们重定向到“/news”。

/*Simplified for this example*/

if(rs.authenticated === true) {
    next();
} else {
    res.redirect('/');
}

有没有办法在这些 if 语句中做到这一点?还是我必须写一个新方法?我已经尝试了几种使用 if 语句的方法,但我只是得到了重定向循环。

4

2 回答 2

5

标准模式适用于所有需要登录用户使用中间件的页面,该中间件验证登录用户并/在他们未登录时重定向到。

function loggedIn(req, res, next) {
  if(req.authenticated === true) {
    next();
  } else {
    res.redirect('/');
  }
}

app.get('/news', loggedIn, newsRoute);
app.get('/', homeRoute);

您的问题是您正在为所有路由使用中间件,而您实际上只想将它用于受保护的路由,这就是您的重定向循环发生的地方。如果您想将登录用户发送到“/news”而不是“/”,您可以只呈现正确的模板或在那里进行条件重定向。

function homeRoute(req, res) {
  if (req.authenticated) {
      return res.redirect('/news');
  }
  res.render('home');
}
于 2013-06-25T21:35:48.723 回答
-1

您想引入一个小型中间件来检查用户是否已登录。您在路由处理程序级别设置它。

请参阅那些 SO 答案:

javascript node.js next()

Express/Connect 中间件如何工作?

Express中使用的参数“next”是什么?

于 2013-06-25T20:59:41.503 回答