2017-04-20 93 views
0

我正在使用MEAN堆栈构建一个web应用程序。MEAN堆栈中的REST API,通过会话的id和id

在构建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

当您需要将用户ID传递给端点时,您的客户端代码需要知道这一点,它是需要提供的后端它以某种方式 - 作为返回的分叉的一部分,或者通常作为对成功登录请求的响应的一部分。客户端可以将其存储在cookie或本地存储中以供以后使用。

不是很实用,不过,必须提供该用户的ID在像每一个路线:

/api/contacts/:id 

当你的用户需要能够访问其他用户的联系人,那么你可能需要在路线中使用该ID,并且当用户想要操纵他或她自己的联系人时,您可能不希望有另一组路线。

我已经在实践中看到有时做过这样的情况下是使用特殊值的ID,如“我”,让你的后端翻译这样所有路线:

/api/contacts/me 

到:

/api/contacts/:id 

其中:id是发出请求的用户的ID,取自会话。这可以通过中间件来完成,以便一次替换所有路由的值,然后您的常规控制器可以像使用它在路由中提供的那样使用它。

+0

嘿,为什么我需要“我”,如果我已经从会话中获得id?我想我可以将它保留为/ api/contacts,每个用户将根据会话获取请求的数据。另外我不需要用户访问其他用户的数据。对于我来说,允许用户使用他们想要的任何ID进行HTTP请求并不安全。 –