NodeJS Passport重定向

时间:2017-05-04 11:21:45

标签: javascript node.js express

我正在尝试使用NodeJS上的Passport和Express Backend脚本实现用户重定向。我面临的问题是我的登录页面不是我的默认主页,而是它:

localhost:3000/login

我设法做到这一点,如果用户没有注册,他就无法访问其他页面,例如/index/dashboard但是当我尝试访问硬编码的网址时会出现问题,例如:

如果我输入localhost:3000/即使我没有登录,我也可以访问默认的index.html页面。只是为了澄清 - localhost:3000/index == localhost:3000

如果我决定操纵这样的路线:localhost:3000/Example/pages/index.htmllocalhost:3000/Example/pages/dashboard.html,即使我已登录,也可以访问这些页面。

我的问题是,如何限制用户操作默认主页和未在节点后端声明的任何其他页面的路由?

我的节点路由代码:

app.get('/login',
        function(req, res){
            res.sendFile(path.join(__dirname + '/login.html'));
        });

    app.get('/index', isLoggedIn,
        function(req, res){
            res.sendFile(path.join(__dirname + '/index.html'));
        });


    app.post('/login',
        passport.authenticate('local', { failureRedirect: '/login' }),
        function(req, res) {
            res.redirect('/index');
        });

      app.post('/login',
    passport.authenticate('local', { failureRedirect: '/login' }),
    function(req, res) {
        res.redirect('/index');
    });

我尝试过使用它:

app.use(function(req, res, next) {
if (req.session.user == undefined) {  
      return res.render('/login', {  failureRedirect:'/login'  });
    }   
    else {
        next();
    }
});

但是我收到一个错误:没有指定默认引擎且没有提供扩展名。我不想使用JADE或Handlebars或其他任何东西作为引擎,只是静态HTML。

如何在不必将节点页面的其余部分定义为app.get(/something, function(req,res){});

的情况下限制路径操作

1 个答案:

答案 0 :(得分:0)

您可以制作护照中间件以检查用户是否经过身份验证

isAuthenticated = (req, res, next) => {
  if (req.isAuthenticated()) {
    return next();
  }

  res.redirect('/login');
};

然后你可以这样做

app.get('/someroute', isAuthenticated, (req, res)=>{
    // do what you want
});