在经过身份验证的 API 中从 URL 或 JWT 获取 ID 更好吗?

Is it better to get ID from URL or JWT in an authenticated API

所以我正在使用 Passport (JWT) 在 Laravel 上创建一些 api。

我在确定以下首选方法时遇到问题:

PUT: api/users/{user_id}
PUT: api/users/me

我需要 api 以便用户可以更改自己的信息,但我也希望管理员可以访问 api 来更改上述信息。

目前我只使用第一个 API 并检查 ID 是否与 JWT 身份验证中的 ID 相同,或者请求 api 的人是否是管理员。
但我也在想,也许把它们分开会更好。第一个 api 应该只能由管理员访问,我应该从 JWT 身份验证中获取第二个 api.

的 ID 什么是正确的选择?或者有更好的选择吗?

我会说使用这种方法更好:

PUT: api/users/{user_id}

这允许任何人以相同的方式始终如一地link到您自己的个人资料或其他一些用户个人资料。然后根据您的身份验证和授权,可以允许您对该资源执行不同的操作。

没有正确或更好的选择。您似乎了解使用其中任何一个的含义,因此真正由您选择。对于 /{user_id} 版本,您必须格外小心,不要从代码中删除正确的验证规则。如果您使用 /users/me 进行 GET 操作,则必须小心设置缓存 headers。如果浏览器缓存对 users/me 的响应,然后另一个用户请求此端点,那么您可以获得其他用户的数据。但是,对于 PUT 操作,这不是问题。