AWS Cognito移动端新手:如何通过用户ID获取手机号、邮箱等属性
通过AWS Cognito获取用户属性的实现方法
刚接触AWS Cognito的话,获取用户属性其实很直观,我来帮你把功能整合到你的现有代码里~根据你的需求,分两种场景给你说明:
一、获取当前已登录用户的属性(最常用的移动端场景)
如果你的用户已经通过Cognito登录,直接用AWSMobileClient的getUserAttributes方法就能拿到所有用户属性,包括用户名、邮箱、手机号这些。你可以把这段代码加到initialize的onComplete回调里:
AWSMobileClient.getInstance().initialize(this, new AWSStartupHandler() { public DynamoDBMapper dynamoDBMapper; @Override public void onComplete(AWSStartupResult awsStartupResult) { // 你原有的Pinpoint配置代码 PinpointConfiguration pinpointConfig = new Pinpoint... // 新增:获取当前登录用户的属性 AWSMobileClient.getInstance().getUserAttributes(new Callback<Map<String, String>>() { @Override public void onResult(Map<String, String> attributeMap) { // 直接获取用户名(也可以从attributeMap里拿"username") String username = AWSMobileClient.getInstance().getUsername(); // 获取邮箱和手机号,注意属性名是Cognito的标准字段 String email = attributeMap.get("email"); String phoneNumber = attributeMap.get("phone_number"); // 这里可以根据业务需求处理这些属性,比如存入本地变量或者展示UI Log.d("CognitoUserInfo", "用户名: " + username + ", 邮箱: " + email + ", 手机号: " + phoneNumber); } @Override public void onError(Exception e) { // 处理获取失败的情况,比如用户未登录或者权限不足 Log.e("CognitoError", "获取用户属性失败: " + e.getMessage()); } }); } });
二、通过用户ID获取其他用户的属性(管理员场景)
如果你需要以管理员身份获取任意用户的属性(比如后台管理需求),可以用CognitoIdentityProviderClient的adminGetUser接口,但要注意移动端需要配置对应的IAM权限(给你的移动端角色添加cognito-idp:AdminGetUser权限),示例代码如下:
// 初始化Cognito客户端 CognitoIdentityProviderClient cognitoClient = CognitoIdentityProviderClient.create(); // 构造请求,替换成你的用户池ID和目标用户ID/用户名 AdminGetUserRequest getUserRequest = AdminGetUserRequest.builder() .userPoolId("你的用户池ID") .username("目标用户的ID或用户名") .build(); try { AdminGetUserResponse response = cognitoClient.adminGetUser(getUserRequest); String targetUsername = response.username(); // 遍历用户属性,提取需要的字段 for (AttributeType attribute : response.userAttributes()) { String attrName = attribute.name(); String attrValue = attribute.value(); if (attrName.equals("email")) { // 处理邮箱 Log.d("TargetUserInfo", "邮箱: " + attrValue); } else if (attrName.equals("phone_number")) { // 处理手机号 Log.d("TargetUserInfo", "手机号: " + attrValue); } } } catch (CognitoIdentityProviderException e) { Log.e("CognitoAdminError", "获取用户属性失败: " + e.awsErrorDetails().errorMessage()); }
注意事项:
- 确保用户已登录:第一种方法要求用户处于认证状态,否则会抛出错误
- 属性名规范:Cognito的标准属性名是固定的,比如
email、phone_number,注意不要写错大小写和下划线 - 权限配置:第二种管理员场景必须确保你的IAM角色拥有对应的操作权限,否则会被拒绝访问
内容的提问来源于stack exchange,提问作者Hank
相关产品推荐
相关产品推荐

