【问题标题】:Nodejs express res.redirect loopNodejs 表达 res.redirect 循环
【发布时间】:2021-04-27 17:56:18
【问题描述】:

使用 Nodejs 和 Express 服务器,我试图阻止任何人在不登录的情况下到达我的第二组路由,虽然这有效,但如果会话未检测到会话令牌中的电子邮件,我会陷入重定向循环.我相信它试图检查 /users 端点的 req.session.email 以及导致重定向循环,但是在我认为 /users 端点会避免检查之后使用会话检查中间件。

我如何组织我的代码,以便只有在满足 req.session.email 时才能访问书籍端点,并且当有人尝试在未登录的情况下访问它时也不会陷入重定向循环?

app.use('/users', users)
app.use((req, res, next) => {
  if(!req.session.email){
    res.redirect('/login')
  }
  else{
    next();
  }
})
app.use('/books', books);

【问题讨论】:

    标签: node.js express middleware redirect-loop


    【解决方案1】:

    app.use 语句的顺序在这种情况下并不重要;如果您只检查 /books 端点,则可以将中间件添加到路由级别。

    const yourMiddlewareFunction = (req, res, next) => {
      if(!req.session.email){
        res.redirect('/login')
      }
      else{
        next();
      }
    }
    
    app.use('/books', yourMiddlewareFunction, books);
    

    【讨论】:

      【解决方案2】:

      如果您只想保护/books 端点,您可以这样做:

      function requireLogin(req, res, next) {
        if(!req.session.email){
          res.redirect('/login')
        }
        else{
          next();
        }
      }
      
      
      app.use('/books', requireLogin, books);
      

      【讨论】:

      • 抱歉,没有看到其他答案 :)
      猜你喜欢
      • 2019-11-29
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 2021-10-23
      • 1970-01-01
      相关资源
      最近更新 更多