如何在客户端进行REST身份验证后获取用户信息?

时间:2016-10-29 16:30:02

标签: java angularjs spring rest spring-rest

我有Spring REST后端和Angular前端。

使用对请求JSON正文中的用户名和密码的“/ login”URL的POST请求执行身份验证(我使用基于表单的身份验证)。 REST后端回复OK代码。一切都很好,我可以执行需要身份验证的前端的其他请求。

但是前端需要知道经过身份验证的用户的角色是什么,以便它可以为其显示正确的视图/死记硬背。我们在哪里可以在前端获得这个角色?我们从身份验证中获得的唯一响应是OK,这对REST来说很好。

我们可以通过向“/ users / [user_id]”执行GET请求来获取用户信息。但是我们没有用户ID,只有用户名。

所以问题是 - REST从正式用户名前端获取角色(或其他用户信息)的正确方法是什么?

作为一种解决方法,我可以在后端创建新请求,该请求使用用户名而不是id,或者我可以将用户ID添加到身份验证响应中。但是我不确定从REST角度来看这是一种正确的方法。

4 个答案:

答案 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"。