我有一个Web应用程序和一个RESTful API来与DB通信。 Web应用程序的前端使用Angular HTTP发布/获取/放入后端,后者又处理身份验证,发布/获取/放入api并返回结果。后端通过JWT将自身认证为API的管理员,但使用基于cookie的会话对用户进行身份验证。因此,API在某种程度上是无状态的,但Web服务器使用状态。
我一直在寻找具有授权机制的选项,以根据用户过滤查询结果。例如,我有一个问题端点,我返回一个仅由登录用户公司创建的问题列表。
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问题端点嵌套在用户的组织端点下,例如:
/user/organisation/questions
3-或者基本上我可以将用户放在对API的请求主体中,这将根据请求正文中的用户组织进行过滤。
4-最后,我可以在Web服务器上跳过基于cookie的会话auth,从前端直接向API发出请求,并使用JWT对用户进行身份验证(这与在第一点中过滤问题的方法相同)。
我对Node.js相当陌生,我想知道是否有一个模块或通用做法来处理1或4中的特别过滤。
答案 0 :(得分:-1)
请注意,这只是尝试遵循模式做法的用户的回复。
我一直在使用Express框架。使用express,您可以非常轻松地处理http请求,这是使用Nodejs进行Web开发的最流行的框架之一。
要解决授权问题,我会添加一个可以过滤的中间件(可以是一个函数)。例如,如果router
是将处理所有请求并发送回复的路由器的名称,我将在router.js
中添加以下代码,该文件将保存所有特定于路由器的逻辑:< / p>
router.use(function isAuthorized(req, res, next){
// Add your filtering code here
});
在这种情况下,它会是,
router.use(passportConf.isAuthenticated);
使用此一次,路由器中的每次点击都必须通过此中间件。
现在,我们正在尝试合并'GET'请求:
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();
});