检查每个node.js请求的身份验证凭据

我正在使用带有Express和connect-auth的node.js来认证用户

这是在请求/索引时的验证:

if(req.isAuthenticated()) {
  res.redirect('/dashboard');
} else {
  res.render('index',{ layout: 'nonav' });
}

然而,退出并返回到f.e. ‘/ dashboard’,我可以看到仪表板。

如何对每个请求进行身份验证检查,以确保始终有有效的用户

更新
我没有任何问题的身份验证,一切正常!我需要一个解决方案,如果有一个有效的用户,检查每个路由/请求,而不会在路由实现中放置一个函数或if语句,因为整个App需要一个有效的用户。 Express-Authentication-Example在路由定义中使用“restrict”,这是接近的,但是很多路由可以很容易地被遗忘。

解决方法

app.all('*',function(req,res,next){
    if(req.isAuthenticated()){
        next();
    }else{
        next(new Error(401)); // 401 Not Authorized
    }
});
// NOTE: depending on your version of express,// you may need to use app.error here,rather
// than app.use.
app.use(function(err,req,next){
    // Just basic,should be filled out to next()
    // or respond on all possible code paths
    if(err instanceof Error){
        if(err.message === '401'){
            res.render('error401');
        }
    }
});

如果在需要身份验证的路由之前和没有(如主页,登录等)的路由之后定义所有路由,则只应影响需要路由的路由。或者,您可以使用RegExp而不是’*’,这将包括一个子路径或需要身份验证的路径列表。

一个选择是创建一个函数以包含在需要验证的每个路由中:

function IsAuthenticated(req,next){
    if(req.isAuthenticated()){
        next();
    }else{
        next(new Error(401));
    }
}
app.get('/login',next){
    res.render('login');
});
app.get('/dashboard',IsAuthenticated,next){
    res.render('dashboard');
});
app.get('/settings',next){
    res.render('settings');
});

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...