如何在 passport js 中授权 API(设置只能访问某些特权类型用户的 API)?
How to Authorize APIs in passport js ( Set up APIs that can only accessible some privileged type of users)?
我一直在使用 passport js 进行 API 身份验证。现在我必须编写只能由某些特权类型的用户访问的 APIs。(对于供应商,管理员 only.Some 可以访问某些 APIs)。在用户模型中,我指定了每个用户的角色(如果用户是管理员、供应商或客户)。
我已经使用 "drop-wizard-auth" 解决了放置向导中的类似问题。
如果用户没有权限访问 API 它应该显示错误 403
请分享link或建议可以解决我的问题。
- 我正在使用 Postgresql(仅供参考)
- 策略是 custom-bearer-token
试试这个解决方案:
在模型用户中,您有 "user_type" 字段接收以下整数。
// model for user
module.exports = (sequelize, DataTypes) => {
let users = sequelize.define ('users', {
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, field: 'id' },
name: { type: DataTypes.STRING (50), field: 'name' },
..
user_type: { type: DataTypes.INTEGER, field: 'user_type' } // 0 for admin, 1 for vendor, 2 for customer
},
});
return users;
};
下面的函数将是 passport.js 文件,它检查此用户是否具有正确的角色来访问此端点。
passport.isAuthorized = ( userType ) => {
return (req, res, next) => {
if (userType == 0) { // mean its admin
if (req.user.user_type == 0) { // user value stored in req through deserialize fucntion
return next(); // user has correct admin role
} else {
return next({ error: 'Please need admin level access to hit endpoint'
});
}
} else if (userType == 1) { // mean its vendor
if (req.user.user_type == 1) {
return next(); // user has correct vendor role
} else {
return next({ error: 'Please need vendor level access to hit endpoint'
}
} else if (userType == 2) { // mean its custumer
if (req.user.user_type == 2) {
return next(); // user has correct custumer role
} else {
return next({ error: 'Please need customer level access to hit endpoint'
}
}
return next({ error: 'something!went wrong.' });
};
};
在路由文件中,你只需要添加这些中间件。
app.post('baseURL/get-user-list',
passport.isAuthenticated, // check user is authorized or not
passport.isAuthorized(1), // check user role, if you want to check for admin pass 0, for vendor pass 1, for customer pass 2
controllerUser.getUser
);
我一直在使用 passport js 进行 API 身份验证。现在我必须编写只能由某些特权类型的用户访问的 APIs。(对于供应商,管理员 only.Some 可以访问某些 APIs)。在用户模型中,我指定了每个用户的角色(如果用户是管理员、供应商或客户)。
我已经使用 "drop-wizard-auth" 解决了放置向导中的类似问题。
如果用户没有权限访问 API 它应该显示错误 403
请分享link或建议可以解决我的问题。
- 我正在使用 Postgresql(仅供参考)
- 策略是 custom-bearer-token
试试这个解决方案:
在模型用户中,您有 "user_type" 字段接收以下整数。
// model for user
module.exports = (sequelize, DataTypes) => {
let users = sequelize.define ('users', {
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, field: 'id' },
name: { type: DataTypes.STRING (50), field: 'name' },
..
user_type: { type: DataTypes.INTEGER, field: 'user_type' } // 0 for admin, 1 for vendor, 2 for customer
},
});
return users;
};
下面的函数将是 passport.js 文件,它检查此用户是否具有正确的角色来访问此端点。
passport.isAuthorized = ( userType ) => {
return (req, res, next) => {
if (userType == 0) { // mean its admin
if (req.user.user_type == 0) { // user value stored in req through deserialize fucntion
return next(); // user has correct admin role
} else {
return next({ error: 'Please need admin level access to hit endpoint'
});
}
} else if (userType == 1) { // mean its vendor
if (req.user.user_type == 1) {
return next(); // user has correct vendor role
} else {
return next({ error: 'Please need vendor level access to hit endpoint'
}
} else if (userType == 2) { // mean its custumer
if (req.user.user_type == 2) {
return next(); // user has correct custumer role
} else {
return next({ error: 'Please need customer level access to hit endpoint'
}
}
return next({ error: 'something!went wrong.' });
};
};
在路由文件中,你只需要添加这些中间件。
app.post('baseURL/get-user-list',
passport.isAuthenticated, // check user is authorized or not
passport.isAuthorized(1), // check user role, if you want to check for admin pass 0, for vendor pass 1, for customer pass 2
controllerUser.getUser
);