如何获取知道电子邮件用户的 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?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Flutter 中的 Firebase 的 UID 获取任何用户的电子邮件? [复制]
如何从 uid Firebase 数据库中获取电子邮件地址?