Flutter 如何获取Firebase UID了解电子邮件用户?

Flutter 如何获取Firebase UID了解电子邮件用户?,flutter,firebase-realtime-database,firebase-authentication,Flutter,Firebase Realtime Database,Firebase Authentication,我正在构建一个Flitter应用程序,管理员配置文件可以创建用户来访问他们的公司。代码正常工作,除非新用户以前是为另一家公司创建的。在这种情况下,FIREBASE AUTH会显示类型为error\u EMAIL\u已在使用的错误。我想做的只是从FIREBASE AUTH检索分配的UID,这是将数据库中的用户分配给其他公司所必需的 这是我的密码 _register(LoginBloc bloc, BuildContext context) async{ final usuarioBlo

我正在构建一个Flitter应用程序,管理员配置文件可以创建用户来访问他们的公司。代码正常工作,除非新用户以前是为另一家公司创建的。在这种情况下,FIREBASE AUTH会显示类型为error\u EMAIL\u已在使用的错误。我想做的只是从FIREBASE AUTH检索分配的UID,这是将数据库中的用户分配给其他公司所必需的

这是我的密码

 _register(LoginBloc bloc, BuildContext context) async{

    final usuarioBloc = Provider.usuarioBloc(context);
    if (!formKey.currentState.validate() ) return;

    final info = await usuarioProvider.crearUsuarioFirebase(bloc.email, bloc.password, true);

    if (info['ok']) {
      final keyUserId = info['localId'];
      usuarioProvider.crearUsuarioRaiz(keyUserId, _prefs.idEmpresa, bloc.email);

      usuario.idUsuario = info['localId'];
      usuario.correo    = bloc.email;

      usuarioBloc.crearUsuarioEmpresa(usuario, usuario.idUsuario, usuario.idEmpresa); //to create user in the Company
      print('******* User was Created *************');

    } else { //info['ok'] is false
      switch (info['mensaje'].code) {
        case 'ERROR_EMAIL_ALREADY_IN_USE':
          usuario.correo = bloc.email;
          // usuario.idUsuario = ????????
          // Here I would like to retrieve the UID to assign it to their additional Company
          usuarioBloc.crearUsuarioEmpresa(usuario, usuario.idUsuario, usuario.idEmpresa); //to create user in the Company
          print('*** User already in use, the user can use his/her usual password ***');
          break;
        default:
          print(info['mensaje'].message); //If it was a different error
      }
    }
  }
在这方面,我有

  Future <Map<String, dynamic>> crearUsuarioFirebase(String email, String password, [bool desdeAdmin = false]) async {
  try {
    AuthResult result =  await _firebaseAuth.createUserWithEmailAndPassword(email: email, password: password);
    FirebaseUser user = result.user;
    return {'ok' : true, 'localId':user.uid, 'email' : user.email};
  } catch (e) {
    print(e);
    return {'ok': false, 'mensaje': e}; 
  }
 }
Future CrearuarioFirebase(字符串电子邮件,字符串密码,[bool desdeAdmin=false])异步{
试一试{
AuthResult result=wait_firebaseAuth.createUserWithEmailAndPassword(电子邮件:电子邮件,密码:密码);
FirebaseUser=result.user;
返回{'ok':true,'localId':user.uid,'email':user.email};
}捕获(e){
印刷品(e);
返回{'ok':false,'mensaje':e};
}
}

如何在知道用户电子邮件的情况下以编程方式获取UID?

无法使用Firebase身份验证客户端API从用户的电子邮件地址查找用户的UID。由于此查找被视为受信任的操作,因此它仅在用于Firebase身份验证的Admin SDK中可用

两种最常见的解决方案是:

  • 在可信环境(如云函数)中创建执行查找的自定义服务器端API,然后从客户端应用程序调用该API。您必须确保只有授权用户才能执行此查找

  • 在创建每个用户的帐户时,或在用户登录时,将每个用户的信息存储到一个数据库中(如您标记问题的实时数据库)。然后,您可以从数据库中的电子邮件中查找UID。在这里,您也必须确保数据仅以符合应用程序数据隐私要求的方式可用

  • 请注意,如果您只需要知道电子邮件地址是否正在使用(而不是使用它的特定UID),您可以调用