微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检查每个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');
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐