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

从AWS Cognito用户池获取用户属性:问题排查与实现方法

如何从AWS Cognito用户池正确获取用户属性(邮箱ID)

我来帮你梳理下你代码里的问题,再给出正确的实现方式:

你的代码存在的几个问题:

  • 代码片段不完整,getCredentialsProvide是拼写错误,正确的方法名应该是getCredentialsProvider()
  • 你错误地试图通过CredentialsProvider获取用户属性——这个组件是用来获取AWS服务调用凭证的,和Cognito用户池的用户属性完全是两个不同的功能模块
  • 缺少异步回调处理逻辑:获取用户属性是异步操作,不能直接同步获取结果,必须通过回调来处理返回的数据或异常

正确的实现代码

首先要确保AWSMobileClient初始化完成,之后调用它的getUserAttributes方法来获取用户的属性集合,从中提取邮箱信息:

AWSMobileClient.getInstance().initialize(getApplicationContext(), new AWSStartupHandler() {
    @Override
    public void onComplete(AWSStartupResult awsStartupResult) {
        // 初始化完成后,异步获取用户属性
        AWSMobileClient.getInstance().getUserAttributes(new Callback<Map<String, String>>() {
            @Override
            public void onResult(Map<String, String> attributes) {
                // Cognito中邮箱属性的键固定为"email"
                String userEmail = attributes.get("email");
                if (userEmail != null) {
                    // 成功拿到邮箱,这里可以执行你的业务逻辑
                    Log.d("CognitoUser", "当前用户邮箱: " + userEmail);
                } else {
                    Log.w("CognitoUser", "该用户未设置邮箱属性");
                }
            }

            @Override
            public void onError(Exception e) {
                // 处理获取失败的情况,比如用户未登录、网络异常等
                Log.e("CognitoUser", "获取用户属性失败", e);
            }
        });
    }
});

额外注意事项:

  • 调用getUserAttributes前必须确保用户已经完成登录认证,否则会抛出未认证的异常
  • 要确认你的Cognito用户池应用客户端已经开启了email属性的读取权限,并且用户在注册时已经提交了邮箱信息
  • 如果需要在初始化完成后的其他代码位置获取属性,直接调用AWSMobileClient.getInstance().getUserAttributes()即可,不用每次都在初始化回调里执行,但要保证AWSMobileClient已经初始化完成

内容的提问来源于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:56:46