Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 设置访问权限的正确方法?_Javascript_Node.js_Express - Fatal编程技术网

Javascript 设置访问权限的正确方法?

Javascript 设置访问权限的正确方法?,javascript,node.js,express,Javascript,Node.js,Express,我正在创建一个用户管理系统-但是我现在发现自己正在检查每个路由器上的用户类型 router.get('/admin/settings', (req, res) => { if(admin) { //Proceed. } } router.get('/admin/users', (req, res) => { if(admin) { //Proceed. } } 有更好的方法吗?我不能就这样定一条路线吗 router.

我正在创建一个用户管理系统-但是我现在发现自己正在检查每个路由器上的用户类型

router.get('/admin/settings', (req, res) => {
    if(admin) {
        //Proceed.
    }
}

router.get('/admin/users', (req, res) => {
    if(admin) {
        //Proceed.
    }
}
有更好的方法吗?我不能就这样定一条路线吗

router.get('/admin*', (req, res) => {
    if(!admin) {
        res.status(404).send('Not found')
    }
}
(我尝试过但没有成功,感觉与其他路线冲突)


同样,在一个类似的注释上。我应该如何处理拒绝用户访问脚本的问题?我要发404还是403

您可以使用Express中间件功能:

router.use(function(req, res, next) {
  if(admin) {
    return next();
  }

  // We fail closed
  return res.status(403).send('Forbidden');
});

// This won't get called if the middleware doesn't call next()
router.get('/admin/settings', (req, res) => {
    // Do stuff
}
这里,只有当用户是
管理员时,我们才调用
next()
,这允许调用继续。在此中间件之后添加的任何路由都将受到保护

同样,在一个类似的注释上。我应该如何处理拒绝用户访问脚本的问题


403是这里合适的代码,不过如果您希望对未经授权的客户端隐藏路由,也可以使用404。我建议。

是404还是403?你有没有费心去查那些代码代表什么?404-找不到,403-禁止状态。我不明白你的意思,如果我拒绝一个脚本的post请求,我想我至少会发送一个回复,而不是什么都不做。我的意思是,我认为你根本懒得看。在这里,我将为您搜索。嗯?不,你为什么要使用它?@gforce301 401 Unauthorized通常用于客户端根本没有进行身份验证的情况。403是为用户已知但没有资源特权的情况而设计的。有一些模棱两可的地方,因为有些服务器确实会在401或403更合适的时候发送404。非常感谢!我要试试这个。使用404也可以吗?考虑到这是一个管理脚本——首先隐藏它存在的事实不是一个好主意吗?404完全可以使用。如果您想对未经身份验证的用户隐藏此路由存在的事实,我建议您这样做。