You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:32:39