gpt4 book ai didi

javascript - 访问页面前检查用户的 "clearance level"

转载 作者:太空宇宙 更新时间:2023-11-04 03:23:36 25 4
gpt4 key购买 nike

我对 Node.js 有点陌生,所以我的问题很简单:

我的路由文件中有此函数,用于检查用户是否经过身份验证

function isLoggedIn(req, res, next) {
if(req.isAuthenticated()){
console.log(req.user);
return next();
}
req.flash('warn_msg', 'Login required');
res.redirect('back');
}

我需要的是一个类似的,它也检查用户的“许可级别”。

这是我写的:

function isLevel(clearance, req, res, next) {
if(req.isAuthenticated()){
if(req.user.level>=clearance){
return next();
}
else {
req.flash('warn_msg', 'Not enough permissions');
res.redirect('back');
}
}
else {
req.flash('warn_msg', 'Login required');
res.redirect('back');
}
}

问题是我可以像这样使用第一个

app.get('/newOrg', isLoggedIn, function(req, res) {
res.render('Orgs/newOrg');
});

但我不知道如何将“间隙”参数传递给第二个参数,并像这样调用它

app.get('/newOrg', isLevel(3), function(req, res) {
res.render('Orgs/newOrg');
});

给我一​​个错误,说“req”未定义

我知道我可以解决并检查 get 路由内的用户级别,但我想要一个“更干净”的解决方案

最佳答案

当express加载路由时,它会寻找应该是函数引用的中间件。在这里,您放置 isLevel(3),本质上是调用该函数并将函数的结果作为中间件。

您需要引用函数。您可以通过创建这样的函数来做到这一点

function checkLevel3(req, res, next) {
return isLevel(3, req, res, next);
}

然后使用 checkLevel3 代替 isLevel(3)

您还可以创建一个高阶函数,它可以按需输出诸如 checkLevel3 之类的函数

function leveler(n) {
return (req, res, next) => isLeveL(n, req, res, next);
}
// now
const checkLevel3 = leveler(3);

关于javascript - 访问页面前检查用户的 "clearance level",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47379255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com