Javascript 使用';passport.isAuthenticated()';检查NodeJ中的多个用户角色
这是我的Javascript 使用';passport.isAuthenticated()';检查NodeJ中的多个用户角色,javascript,node.js,express,passport.js,passport-local,Javascript,Node.js,Express,Passport.js,Passport Local,这是我的isAuthenticated函数: var isAuthenticated = function (req, res, next) { if (req.isAuthenticated()) return next(); res.redirect('/'); }; 下面是一个使用PassportJsisAuthenticated()函数呈现视图的方法 router.get('/', isAuthenticated, function (req, res, next) {
isAuthenticated
函数:
var isAuthenticated = function (req, res, next) {
if (req.isAuthenticated()) return next();
res.redirect('/');
};
下面是一个使用PassportJsisAuthenticated()
函数呈现视图的方法
router.get('/', isAuthenticated, function (req, res, next) {
res.render('dashboard');
});
此isAuthenticated
函数将为所有登录用户呈现该视图。类似地,我想要一些只有管理员用户才能访问的其他视图。在这种情况下,我可以使用相同的功能来实现这一点,而不是创建单独的策略或功能吗
比如将用户角色作为参数提供给
isAuthenticated
函数,并在函数中进行额外检查,以检查请求中的用户对象是否与参数中提供的角色相同?或任何其他类似的方式来避免编写另一个单独的功能/策略?还有,首选的最佳方法是什么?如果有人能详细解释,我将不胜感激。Passport将用户信息存储在会话中,并使用这两个会话对用户进行序列化和反序列化
passport.serializeUser(function (req, user, done) {
//Check user permission here and assign to user object.
//user.permission = "user_permission"
return done(null, user);
});
passport.deserializeUser(function (req, user, done) {
done(null, user);
});
在auth函数中,您可以检查权限,如下所示:
var isAuthenticated = function (req, res, next) {
if (req.isAuthenticated()){
if(req.user.permission === 'user_permission'){
//route for admin
}else{
//rote for non-admin
}
}else{
res.redirect('/');
}
};
谢谢,但我觉得有点混乱
IsAuthenticated
是一个单一(某种)全局函数,我们将其用作所有路由的中间件,这些路由只需要经过身份验证的用户访问。有一个页面(比如仪表板),管理员用户只能访问该页面,因此我如何在这里使用相同的功能?isAuthenticated检查用户是否经过身份验证可以访问该网站,然后我们进行另一次权限检查,检查用户是否有资格访问该特定页面。比如,有两个路由profile
和dashboard
,我们想让所有登录用户访问profile
路由,但只有管理员用户可以访问dashboard
路由。我们如何在这两种情况下使用相同的isauthenticated
函数?