【发布时间】:2016-03-01 09:25:06
【问题描述】:
我有一个 Web 应用程序和一个 RESTful API 来与数据库通信。 Web 应用程序的前端使用 Angular HTTP 向后端发布/获取/放置,后者反过来处理身份验证,向 api 发布/获取/放置并返回结果。后端通过 JWT 将自己认证为 API 的管理员,但使用基于 cookie 的会话对用户进行身份验证。因此,在某种程度上,API 是无状态的,但 Web 服务器使用状态。
我一直在寻找具有授权机制以根据用户过滤查询结果的选项。例如,我有一个问题端点,我返回一个仅由登录用户所在公司创建的问题列表。
1-我一直在web服务器上做(基本上是过滤):
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 发出的请求正文中,这将根据请求正文中的用户组织进行过滤。
4- 最后,我可以跳过 Web 服务器上基于 cookie 的会话身份验证,直接从前端向 API 发出请求,并使用 JWT 对用户进行身份验证(这与第一点中如何过滤问题相同)。
我对 Node.js 还很陌生,我想知道是否有一个模块或常见做法来处理 1 或 4 中的特别过滤。
【问题讨论】:
-
我假设restler是路由器?还是nodejs应用的名字?
-
@sarker306 它是一个 HTTP 客户端库。 github.com/danwrong/restler 该块在路由器本身中,将组织信息添加到对 API 的请求中。
标签: javascript node.js api rest express