如何获取知道电子邮件用户的 Firebase UID?

Posted

技术标签:

【中文标题】如何获取知道电子邮件用户的 Firebase UID?【英文标题】:How to get Firebase UID knowing email user? 【发布时间】:2020-11-28 16:12:56 【问题描述】:

我正在构建一个 Flutter 应用,其中 管理员配置文件 可以创建用户来访问他们的公司。该代码可以正常工作,除非新用户之前是为另一家公司创建的。在这种情况下,来自 FIREBASE AUTH 的类型为 ERROR_EMAIL_ALREADY_IN_USE 的错误会出现。我想要做的只是从 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
      
    
  

在 Provider 中,我有...

  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; 
  
 

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

以上是关于如何获取知道电子邮件用户的 Firebase UID?的主要内容,如果未能解决你的问题,请参考以下文章

如何从firebase中的电子邮件中获取用户信息

如何从 Flutter 中的 Firebase 的 UID 获取任何用户的电子邮件? [复制]

如何从 uid Firebase 数据库中获取电子邮件地址?

如何从所有用户 ID (UID) 中获取特定值并保存在 RecyclerView Firebase UI

如何从 Firebase 获取特定用户的用户名?

如何以编程方式获取 Firebase 中的注册用户列表 [重复]