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);
在路由和呈现网站之前,我想检查用户是否经过身份验证以及是否属于某种类型。 "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);