【问题标题】:Node js too many redirect using middleware redirectNode js太多重定向使用中间件重定向
【发布时间】:2016-09-08 12:27:10
【问题描述】:

在我的 Node.js 应用程序(我使用的是 express 4.x)中,我想检查用户是否已登录。如果用户未登录,我想重定向到我的登录页面。然后我在中间件中这样做:

Server.js

app.use(function (req, res, next) {

    // if user is authenticated in the session, carry on
    if (req.isAuthenticated())
        return next();

    // if they aren't redirect them to the home page
    res.redirect('/login');
});

登录路径

// Login page
app.get('/login', function(req, res){
    res.render('pages/login', {
                error   : req.flash('loginError'),
                info    : req.flash('info'),
                success : req.flash('success')
            });
});

但是当我在中间件中添加这段代码时,登录页面被调用了 30 多次......我的浏览器显示Too many redirect

你知道为什么我的登录页面被调用很多吗?

【问题讨论】:

  • req.isAuthenticated() 是否也需要'/login'?因为那是一个无限循环。
  • 我编辑了我的问题。 /login 也不需要 req.authenticated。但我试图删除if (req.isAuthenticated()) return next(); 进行测试。我只是让res.redirect('/login'); 和我有同样的错误
  • 检查中间件,如果当前路径是 login ,不要重定向。为了更好的情况,请在重定向后致电next
  • @EbrahimPasbani 很好的解决方案,非常感谢。
  • 酷,不客气

标签: javascript node.js redirect express


【解决方案1】:

你会陷入无限循环,因为如果请求的路径是login,即使如此,也会再次重定向到login

app.use(function (req, res, next) {

    // if user is authenticated in the session, carry on
    if (req.isAuthenticated())
        return next();

    // if they aren't redirect them to the home page
    if(req.route.path !== '/login')
      res.redirect('/login');
    next();
});

【讨论】:

    猜你喜欢
    • 2017-12-22
    • 2021-03-25
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 2015-09-23
    相关资源
    最近更新 更多