我使用快速框架,让我说我在API中有这一行:
router.delete('/user',(req, res) => { //deleting...}
现在我希望只有管理员才能访问此行。
在其余代码中,只有用户可以访问的行如下:
router.put('/post')
只有管理员可以访问的行如下:
router.put('/killDB)
能够帮助我区分两者的最佳方式(代币,会话或类似的东西)是什么?
答案 0 :(得分:0)
使用密码对用户进行身份验证,然后检查用户是否为管理员。然后只需在您的路线中添加密码逻辑。下面我将提供我的代码,我只是检查用户是否已登录(这对我来说已足够)
router.get('/delete', isLoggedIn, function (req, res) {
Page.collection.drop();
var page = new Page();
page.save(function (err) {
if(err) throw err;
res.redirect('/admin');
});
});
// render login form
router.get('/login', function (req, res) {
res.render('login',{ message: req.flash('error'), layout: null});
});
// process the login form
router.post('/login', passport.authenticate('local-login', {
successRedirect : '/admin', // redirect to the secure profile section
failureRedirect : '/login', // redirect back to the signup page if there is an error
failureFlash : true // allow flash messages
}));
router.get('/logout', function(req, res) {
req.logout();
res.redirect('/');
});
function isLoggedIn(req, res, next) {
// if user is authenticated in the session, carry on
if (req.isAuthenticated())
return next();
// if they aren't redirect them to the home page
res.redirect('/');
}
答案 1 :(得分:0)
您可以使用连接角色包来授权您的用户,然后将其路由到允许他们访问的URL。
您也可以选择 passport.js ,但它更像是身份验证包,其中连接角色只是针对性at仅提供“授权”部分。这个包适用于Express。
实施此软件包后,您可以使用“role”属性检查用户的授权级别,并允许他们执行各自的操作。
例如,
if (req.user.role === 'admin') {
router.put('/killDB)
}
您可以在此处查看该套餐:https://www.npmjs.com/package/connect-roles
希望这有帮助!