从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
相关产品推荐
相关产品推荐

