我正在使用MEAN堆栈构建一个Web应用程序。
在构建REST API时,我看到了很多带有以下端点的示例
/api/contacts/:id
用于GET,PUT和DELETE方法。
我做了一些不同的事情,我在Express框架中启用了会话,现在当我执行HTTP请求时,我可以在req.session.req.payload._id下看到用户文档ID(对于mongoDB),这使我能够访问文档。
这就是为什么我也不需要在URL中公开用户文档ID HTTP请求。
我的问题是哪种方法更好更安全?
另外,如果我不使用会话,如何在Angular中获取用户ID以传递给HTTP请求。
最后一个......在调用更新数据库的函数之前,我还使用JWT作为中间件。这给了我一些安全感,但是对于具有正确令牌的用户来说,使用不同的ID进行HTTP请求以及获取,更新和删除其他用户数据是不是可能? 使用我正在使用的当前方法(会话)
是不可能的答案 0 :(得分:0)
当您需要将用户ID传递给端点时,您的客户端代码将需要知道它并且它是需要以某种方式提供它的后端 - 作为返回的toked的一部分或通常作为响应的一部分成功登录请求。客户端可以将其存储在cookie或本地存储中以供以后使用。
但是,必须在每条路线中提供用户的ID,这是不太实际的,例如:
/api/contacts/:id
当您的用户需要能够访问其他用户的联系人时,您可能需要在路线中使用该ID,并且您可能不希望在用户想要操纵他或她自己的情况时使用另一组路线触点。
我在实践中有时会在这种情况下看到的是使用像“我”这样的ID的特殊值,并让你的后端翻译所有这样的路线:
/api/contacts/me
为:
/api/contacts/:id
其中:id
是发出请求的用户的ID,取自会话。这可以通过中间件来完成,以便一次性替换所有路由的值,然后您的普通控制器可以使用它,就像在路径中提供的一样。