Javascript Node.js中的RESTful API-可以通过授权进行过滤吗
我有一个web应用程序和一个RESTful API与DB通信。web应用程序的前端使用Angular HTTP将/gets/puts发送到后端,后者依次处理身份验证、将/gets/puts发送到api并返回结果。后端通过JWT将自己验证为API的管理员,但使用基于cookie的会话验证用户。因此,在某种程度上,API是无状态的,但web服务器使用状态 我一直在寻找具有授权机制的选项,以根据用户筛选查询结果。例如,我有一个questions端点,其中我返回一个仅由登录用户的公司创建的问题列表 1-我一直在web服务器上进行基本过滤:Javascript Node.js中的RESTful API-可以通过授权进行过滤吗,javascript,node.js,api,rest,express,Javascript,Node.js,Api,Rest,Express,我有一个web应用程序和一个RESTful API与DB通信。web应用程序的前端使用Angular HTTP将/gets/puts发送到后端,后者依次处理身份验证、将/gets/puts发送到api并返回结果。后端通过JWT将自己验证为API的管理员,但使用基于cookie的会话验证用户。因此,在某种程度上,API是无状态的,但web服务器使用状态 我一直在寻找具有授权机制的选项,以根据用户筛选查询结果。例如,我有一个questions端点,其中我返回一个仅由登录用户的公司创建的问题列表 1-
router.get('/questions', passportConf.isAuthenticated, function(req, res) {
restler.get(process.env.API_URL + '/questions/?organisation=' + req.user.organisation._id).on('complete', function(questions) {
res.json({
data: questions
});
});
});
2-但是,另一个选项是嵌套在用户组织端点下的put questions端点,例如:
/user/organisation/questions
3-或者基本上我可以将用户放在向API发出的请求正文中,API将根据请求正文中用户的组织进行过滤
4-最后,我可以跳过web服务器上基于cookie的会话身份验证,从前端直接向API发出请求,并使用JWT对用户进行身份验证,这与第一点中如何过滤问题相同
我是Node.js的新手,我想知道在1或4中是否有一个模块或常见的实践来处理特别的过滤。请注意,这只是一个试图遵循模式实践的用户的响应 我一直在使用Express framework。使用express,您可以相当轻松地处理http请求,这是使用Nodejs进行web开发的最流行的框架之一 为了解决授权问题,我将添加一个中间件,它可以是一个使过滤成为可能的功能。例如,如果router是处理所有请求并发送回复的路由器的名称,我将在router.js中添加以下代码,所有路由器特定逻辑将保存在该文件中:
router.use(function isAuthorized(req, res, next){
// Add your filtering code here
});
在这种情况下,应该是,
router.use(passportConf.isAuthenticated);
使用一次,路由器中的每一次点击都必须通过这个中间件
现在,我们正在尝试合并“获取”请求:
var http = require('http'); //basic node.js module, needed for handling http requests
router.get('/questions', function(req, res) {
var url = process.env.API_URL;
var opt = {host: url, path : '/questions/?organisation=' + req.user.organisation._id}
http.request(opt, function(questions){
res.json({data: questions});
}).end();
});
我假设restler是路由器?或者是nodejs应用程序的名称?@sarker306它是一个HTTP客户端库。该块位于路由器本身,将组织信息添加到向API发出的请求中。这并不能远程回答我的问题,API_URL从我的网络中的其他虚拟机开始,我不知道添加斜杠如何让我的生活更轻松。基本上,我试图证明,如果您使用Express,您不需要使用其他模块来处理http请求。重新加载以获得更新的响应。我没有处理HTTP请求,我正在向我的API服务器发出HTTP请求。很抱歉,这与我的授权问题无关。我使用restler是有原因的,在您发布的示例中,您使用“http”模块发出请求。我很感激你试图回答我的问题,但我的问题不是如何提出请求。那么,在这种情况下,我应该问你是否愿意让你的web服务器成为无状态的,就像API一样?在这种情况下,使用JWT会有所帮助。据我所知,选项4将要求您在请求头x-access-token中发送访问令牌,并在服务器端对其进行解码以找到相应的用户(如果有)。在该步骤之后,您可以将解码的用户添加到请求中,并继续过滤。如果这是你想要的,我可以更新我的答案。