首页 > 解决方案 > Flutter 的 Firebase 文档不适用于删除用户

问题描述

以下有关删除用户的文档不起作用:

try {
  await FirebaseAuth.instance.currentUser.delete();
} catch on FirebaseAuthException (e) {
  if (e.code == 'requires-recent-login') {
    print('The user must reauthenticate before this operation can be executed.');
  }
}

“delete()”不是 Flutter 识别的函数。Flutter 也无法识别“FirebaseAuthException”。

如何删除用户?我在哪里可以找到这些信息?

标签: flutterfirebase-authentication

解决方案


使用flutter,如果你想删除firebase帐户以及关联的firestore用户集合文档,下面的方法可以正常工作。(用户集合中由 firebase uid 命名的文档)。

数据库类

class DatabaseService {
  final String uid;

  DatabaseService({this.uid});

  final CollectionReference userCollection =
      Firestore.instance.collection('users');

  Future deleteuser() {
    return userCollection.document(uid).delete();
  }
}

否则请使用 Firebase 0.15.0 或更高版本,Firebase reauthenticateWithCredential() 方法会抛出类似 { noSuchMethod: was called on null } 的错误。

认证类

class AuthService {
  final FirebaseAuth _auth = FirebaseAuth.instance;

  Future deleteUser(String email, String password) async {
    try {
      FirebaseUser user = await _auth.currentUser();
      AuthCredential credentials =
          EmailAuthProvider.getCredential(email: email, password: password);
      print(user);
      AuthResult result = await user.reauthenticateWithCredential(credentials);
      await DatabaseService(uid: result.user.uid)
          .deleteuser(); // called from database class
      await result.user.delete();
      return true;
    } catch (e) {
      print(e.toString());
      return null;
    }
  }
}

然后在颤振小部件树的可点击事件中使用以下代码来实现目标:

onTap: () async {  
     await AuthService().deleteUser(email, password);
}

推荐阅读