expressjs条件重定向

时间:2013-06-25 20:41:40

标签: javascript redirect express

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

/*Simplified for this example*/

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

有没有办法在这些if语句中执行此操作?或者我是否必须编写新方法?我已经尝试了几种使用if语句的方法,但我只是获得重定向循环。

2 个答案:

答案 0 :(得分:4)

标准模式适用于所有要求登录用户使用中间件验证登录用户的页面,如果他们未登录则会重定向到/

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');
}

答案 1 :(得分:-1)

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

请看那些答案:

javascript node.js next()

How does Express/Connect middleware work?

What is the parameter "next" used for in Express?