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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:21:01