避免用户在创建时使用 Firebase 登录

Ren*_*las 1 firebase firebase-authentication flutter

我有一个应用程序,其中用户应该仅由管理员用户创建,问题是,当在 Firebase 中创建新用户时,应用程序使用新用户信息登录,因此原始登录用户(管理员用户)必须登录退出,然后重新登录以创建新用户。

这是我创建新用户的功能:

void createUser(
    String email,
    String password,
    String nombre,
    String dui,
    DateTime fechaNacimiento,
    String telefono,
    String nombreContacto,
    String telefonoContacto,
    DateTime fechaIngreso,
    String radio,
    File foto,
    String acceso,
  ) async {
    try {
      final auth = FirebaseAuth.instance;

      UserCredential authResult = await auth.createUserWithEmailAndPassword(
        email: email,
        password: password,
      );

      //var uploadUid = authResult.user?.uid;

      final ref = FirebaseStorage.instance
          .ref()
          .child('user_images')
          .child(authResult.user!.uid + '.jpg');

      await ref.putFile(foto);

      final url = await ref.getDownloadURL();

      await FirebaseFirestore.instance
          .collection('users')
          .doc(authResult.user!.uid)
          .set({
        'nombre': nombre,
        'dui': dui,
        'fechaNacimiento': fechaNacimiento,
        'telefono': telefono,
        'nombreContacto': nombreContacto,
        'telefonoContact': telefonoContacto,
        'fechaIngreso': fechaIngreso,
        'radio': radio,
        'foto': url,
        'acceso': acceso,
        'uid': authResult.user!.uid,
        'correo': email,
        'contrasena': password,
      });
    } catch (err) {
      print(err);
    }
  }
Run Code Online (Sandbox Code Playgroud)

关于如何避免在新创建的用户创建用户时登录的任何想法。

亲切的问候

Pet*_*ina 5

无需注销原始管理员用户即可创建新用户。只需这样做即可。

FirebaseApp secondaryApp = await Firebase.initializeApp(
  name: 'SecondaryApp',
  options: Firebase.app().options,
);

try {
  UserCredential credential = await FirebaseAuth.instanceFor(app: secondaryApp)
      .createUserWithEmailAndPassword(
    email: 'email',
    password: 'password',
  );
  if (credential.user == null) throw 'An error occured. Please try again.';
  await credential.user.sendEmailVerification();
} on FirebaseAuthException catch (e) {
  if (e.code == 'weak-password') {
    return _showError('The password provided is too weak.');
  } else if (e.code == 'email-already-in-use') {
    return _showError('An account already exists for this email.');
  }
} catch (e) {
  return _showError('An error occured. Please try again.');
}
...

// after creating the account, delete the secondary app as below:
await secondaryApp.delete();
Run Code Online (Sandbox Code Playgroud)

上述代码不会注销admin用户,admin用户在创建帐户后仍然可以继续正常操作。