首页 > 解决方案 > 同时在 Firebase 中创建多个用户

问题描述

嗯,不完全是同时。更像是一个接一个,在一个 for 循环中。

问题:所以在某些情况下,我使用的代码确实设法创建了多个帐户,但它经常给我一个错误,即用户为空并且无法写入数据库。

编码:

Database db = FirebaseDatabase.getInstance().getReference();
String password = "1234567"; // Same password for all accounts
ArrayList emailArray = new ArrayList(); // For example, 20 premade emails

        for (int i = 0; i < emailArray.size(); i++){
            mAuth.createUserWithEmailAndPassword((String) emailArray.get(i), password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (mAuth.getCurrentUser() != null) {
                        
                     String userId = mAuth.getCurrentUser().getUid();  // This value is returning null
                     
                     // Writing a bunch of things to the database for each user 
                     db.child(userId).child("name").setValue(...)
                     ...

                     mAuth.signOut();
                        
                    }
                }
            });
        }

我想我可能不得不使用 AuthStateListener 但我不确定,我不知道如何实现它。我将如何实现这一目标?请让我知道我是否应该在我的帖子中包含其他任何内容。谢谢!

标签: javaandroidfirebasefirebase-realtime-databasefirebase-authentication

解决方案


您不应该使用客户端 Android SDK 来创建这样的多个用户。您的应用很有可能会被标记为滥用,并被锁定在系统之外。

对于管理用例,请在受信任的环境中使用 Admin SDK。


在代码级别上,出现问题是因为只有一个值,mAuth.getCurrentUser()并且您正在尝试并行创建所有用户。createUserWithEmailAndPassword在开始下一个之前,您需要等待每个完成。但如上所述:这种方法一开始就有缺陷,所以我不建议进一步走这条路。


推荐阅读