【问题标题】:How to get Firebase UID knowing email user?如何获取知道电子邮件用户的 Firebase UID?
【发布时间】: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?

【问题讨论】:

    标签: flutter firebase-realtime-database firebase-authentication


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-11-28
      • 2017-01-23
      • 1970-01-01
      • 2019-07-09
      • 2021-02-22
      • 2019-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多