Flutter Amplify 用户注册后如何获取AWS Cognito中的用户ID
Flutter Amplify对接Cognito获取用户ID解决方案
以下为两种可行的实现方案,可根据你的业务流程选择:
方案1:用户验证登录后获取(推荐)
该方案适配你当前的邮箱链接验证流程,数据准确性最高,不会产生脏数据:
用户点击邮箱验证链接完成验证后,首次调用登录接口成功后,执行以下代码即可获取Cognito唯一用户ID:
Future<void> afterUserSignIn() async { try { final currentUser = await Amplify.Auth.getCurrentUser(); // currentUser.userId 就是Cognito生成的全局唯一用户ID(即sub字段) await saveUserIdToOwnDb(currentUser.userId); } catch (e) { print(e); } }
方案2:注册接口调用完成后直接获取
如果你需要在用户点击验证链接前就拿到用户ID写入自有库,可通过Cognito专属的结果类型提取字段:
你需要先导入amplify_auth_cognito包,将通用的SignUpResult强转为CognitoSignUpResult类型,即可直接获取userSub字段,该字段和后续登录拿到的用户ID完全一致:
import 'package:amplify_auth_cognito/amplify_auth_cognito.dart'; Future<void> signUp(String username, String password, String email) async { try { CognitoSignUpResult result = await Amplify.Auth.signUp( username: username, password: password, options: CognitoSignUpOptions(userAttributes: {'email': email}) ) as CognitoSignUpResult; String userId = result.userSub; // 此处执行将userId写入自有数据库的逻辑 } catch (e) { print(e); } }
注意事项
- 方案2会产生未验证的用户脏数据,建议给自有库的用户表新增
验证状态字段标记,或者定期清理超过有效期仍未完成验证的无效用户数据 - 请勿使用用户名作为用户唯一标识存储,Cognito的用户名支持修改,只有
sub(即上述代码获取的userId)是用户全局唯一且永久不变的标识
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

