【发布时间】:2017-03-12 07:09:18
【问题描述】:
我有 Spring REST 后端和 Angular 前端。
使用对“/login”URL 的 POST 请求执行身份验证,其中用户名和密码位于请求 JSON 正文中(我使用基于表单的身份验证)。 REST 后端使用 OK 代码回复。一切都很好,我可以从需要身份验证的前端执行其他请求。
但是前端需要知道经过身份验证的用户的角色是什么,以便它可以显示正确的视图/死记硬背。我们在哪里可以在前端获得这个角色?我们从身份验证中得到的唯一响应是 OK,这对于 REST 来说很好。
我们可以通过对“/users/[user_id]”执行GET请求来获取用户信息。但是我们没有用户 ID,只有用户名。
所以问题是 - REST 从只有用户名的前端获取角色(或其他用户信息)的正确方法是什么?
作为一种解决方法,我可以在使用用户名而不是 id 的后端创建新请求,或者我可以将用户 id 添加到身份验证响应中。但我不确定从 REST 的角度来看这是一种正确的方法。
【问题讨论】:
-
如果你的后端需要传递一个用户ID来获取当前用户信息,但不允许获取用户ID,那么后端就存在严重的设计问题。您似乎能够发送需要身份验证的请求。这意味着后端能够识别您的身份(可能要归功于 cookie)。如果这是真的,您不需要传递任何参数作为参数,因为它是在 cookie 中隐式传递的。你可以只拥有一个 /current-user 资源。
-
我正在开发后端和前端。后端遵循 REST 提供用户信息的正确方法是什么?
-
我刚刚告诉过你。假设后端有一种识别请求的隐式方式(例如,使用 cookie),您可以只提供 /current-user 或 /me 或任何您想命名的资源。例如,请参阅developer.github.com/v3/users/#get-the-authenticated-user。
-
从 REST 的角度来看这会好吗?我不确定“POST /current-user”或“DELETE /current-user”是什么意思。
-
如果用户名是用户的唯一标识,是的。你的理解是错误的。如果资源是只读的,那么为该资源提供 DELETE 和 POST 方法是没有意义的。您是否注意到 github api 仅使用 /user 来获取经过身份验证的用户?
标签: java angularjs spring rest spring-rest