当前位置: 首页 > 知识库问答 >
问题:

客户端REST认证后如何获取用户信息?

孙子民
2023-03-14

我有Spring座后端和角前端。

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

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

我们可以通过执行GET请求来获取用户信息,但是我们没有用户id,只有用户名。

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

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

共有3个答案

茅高卓
2023-03-14

在对用户进行身份验证时从服务器获取用户信息。在成功的用户身份验证时传递用户详细信息。

阎烨
2023-03-14

有两种做这件事的方法。

1) 从服务器成功身份验证后,使用用户名对服务器再进行一次<code>$http</code>调用,您可以从服务器逻辑中获取详细信息,该服务器逻辑将获取并存储结果到<code>$rootScope</code>中。此信息将通过应用程序提供。

2) 当您对用户进行身份验证时,如果用户有效,则获取他的详细信息并将其存储在对象中。

现在在你的服务器逻辑中,同时返回响应,你可以像下面这样做

response.setHeaders("User",userDetilsObj);

注意:响应是一个HttpServletResponse对象

如你所说,请求完成后,我们将得到一个状态OK响应,即200。要访问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..
}

希望这能让你了解如何实现你想要的结果。

呼延英奕
2023-03-14

不能重写HTTP方法。因此,如果您计划使用相同路径的不同查询参数编写GET调用,那么这是不允许的。您需要编写两个GET路径。

例如

GET/users/userid/{ id } GET/users/username/{ name }

在第二次调用中,您可以添加所需的逻辑,以便在第二个调用中获得角色。

 类似资料:
  • 获取环境相关信息 var info = Tida.appinfo; 返回 json 格式: { "engine": "tmm", "name": "tmall", "engineVer": "4.9.2", "ver": "4.9.2" } 比较全面的环境相关判断 lib.env.params - url中search参数的对象,例如有ttid参数可以通过lib

  • 我有一个Java服务器应用程序,它通过TLS从GRPC客户端获取数据并在服务器上处理。现在我想使用多个客户端。要向客户端分配接收到的事件,我想读取客户端证书并使用证书的DN分配事件。如何获取客户端证书? 我发现这个构建服务器:https://github.com/grpc/grpc-java/blob/master/SECURITY.md#mutual-tls 然后你应该实现一个服务器拦截器 }

  • Iv'e一直在使用本指南:https://spring.io/guides/gs/rest-service要创建RESTFul web服务,我面临的问题是,我不知道如何获取客户机IP地址等信息,使用此API是否可能? 谢谢

  • 我正在从NVP/SOAP PayPal API集成转向更新的REST API。 我以前的网站代码使用的是“快速结帐”流程。 网站发起付款,用户被重定向到贝宝; 用户登录并确认发起的支付; 用户被重定向到该网站,该网站调用PayPal以获得用户个人信息以保存在交易记录中(例如姓名、地址、...); 我的意思是,在onAuthorize回调方法中,我确实有用户授权支付的paymentID和payerI

  • 问题内容: 我还很陌生,对于使用证书进行身份验证时客户端应该显示的内容有些困惑。 我正在编写一个Java客户端,该客户端需要对POST特定对象进行简单的数据处理URL。那部分工作正常,唯一的问题是应该完成。该部分相当容易处理(无论是使用Java的内置HTTPS支持还是使用Java的内置支持),但是我一直坚持使用客户端证书进行身份验证。我注意到这里已经存在一个非常类似的问题,我还没有尝试使用我的代码