我有Spring REST后端和Angular前端。
使用对请求JSON正文中的用户名和密码的“/ login”URL的POST请求执行身份验证(我使用基于表单的身份验证)。 REST后端回复OK代码。一切都很好,我可以执行需要身份验证的前端的其他请求。
但是前端需要知道经过身份验证的用户的角色是什么,以便它可以为其显示正确的视图/死记硬背。我们在哪里可以在前端获得这个角色?我们从身份验证中获得的唯一响应是OK,这对REST来说很好。
我们可以通过向“/ users / [user_id]”执行GET请求来获取用户信息。但是我们没有用户ID,只有用户名。
所以问题是 - REST从正式用户名前端获取角色(或其他用户信息)的正确方法是什么?
作为一种解决方法,我可以在后端创建新请求,该请求使用用户名而不是id,或者我可以将用户ID添加到身份验证响应中。但是我不确定从REST角度来看这是一种正确的方法。
答案 0 :(得分:0)
您无法覆盖HTTP方法。因此,如果您计划使用具有相同路径的不同查询参数编写GET调用,则不允许这样做。您需要编写两个GET路径。
e.g。
GET / users / userid / {id} GET / users / username / {name}
在第二个调用中,您可以添加所需的逻辑以获取第二个角色。
答案 1 :(得分:0)
有两种方法可以做到。
1)从服务器成功进行身份验证后,再次使用用户名$http
调用服务器,您可以从服务器逻辑中获取详细信息,该服务器逻辑将该结果提取并存储在$rootScope
中。此信息将在整个应用程序中提供。
2)当您对用户进行身份验证时,如果用户有效,则获取其详细信息并将其存储在对象中。
现在在您的服务器逻辑中返回响应时,您可以执行以下操作
response.setHeaders("User",userDetilsObj);
注意:响应是一个HttpServletResponse对象。
请求完成后,如您所说,我们将获得200的状态OK响应。要访问JS端的用户详细信息,请按照以下代码
if(response.status == '200/OK'){
$rootScope.user = response.getHeaders().User;//In this object all the user details set at server side are available now..
}
希望这能为您提供如何实现预期结果的一些启示。
答案 2 :(得分:0)
在对用户进行身份验证时从服务器获取用户信息。请在成功进行用户身份验证时获取用户详细信息。
答案 3 :(得分:0)
在评论中讨论@JBNizet的问题后,我决定从" / users /:user_id"更改REST端点。 to" / users /:user_name"。