Node.js 带变量的中间件认证

Node.js middleware authentication with variable

在路由和呈现网站之前,我想检查用户是否经过身份验证以及是否属于某种类型。 "middleware" 看起来像这样:

function isAuthenticated(req,res,next,required_type){
if(Parse.User.current()){
    Parse.User.current().fetch().then(function(fetchedUser){
        var type = fetchedUser.get("type");            
        if(type == required_type){
            return next();
        }else{
            res.redirect("/login");
        }

    }, function(error){
        res.redirect("/login");
    });
}else{
    res.redirect("/login");
}
}

这部分看起来很公平也很简单。这是我在路由之前尝试使用中间件的方式:

app.get('/dashboard_client',isAuthenticated, dashboard_client_view_controller.displayView);

我的问题是,如何设置 required_type 变量,因为 Node.js 不知何故知道如何获取和查找 req、res 和 next 变量。感谢您回答这样一个愚蠢的问题,我想很明显可以解决问题。

你可以试试这个方法:

//中间件:

function isAuthenticated(required_type) {
    return function(req, res, next) {
        if (Parse.User.current()) {
            Parse.User.current().fetch().then(function (fetchedUser) {
                var type = fetchedUser.get("type");
                if (type == required_type) {
                    return next();
                } else {
                    res.redirect("/login");
                }

            }, function (error) {
                res.redirect("/login");
            });
        } else {
            res.redirect("/login");
        }
    }

};

//路线

app.get('/dashboard_client',isAuthenticated('admin'), dashboard_client_view_controller.displayView);