java - 同时在 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 但我不确定,我不知道如何实现它。我将如何实现这一目标?请让我知道我是否应该在我的帖子中包含其他任何内容。谢谢!
解决方案
您不应该使用客户端 Android SDK 来创建这样的多个用户。您的应用很有可能会被标记为滥用,并被锁定在系统之外。
对于管理用例,请在受信任的环境中使用 Admin SDK。
在代码级别上,出现问题是因为只有一个值,mAuth.getCurrentUser()
并且您正在尝试并行创建所有用户。createUserWithEmailAndPassword
在开始下一个之前,您需要等待每个完成。但如上所述:这种方法一开始就有缺陷,所以我不建议进一步走这条路。
推荐阅读
- substrate - 将存储宏从帧 v1 转换为帧 v2
- angular - 如何将数据作为对象从 Firebase 获取到服务,然后正确地到页面(Angularfire + ionic4)?
- reactjs - 如何缓存反应组件获取?
- c# - 小于 O(n2) 时间复杂度的算法
- php - WordPress如何仅显示顶级类别
- python - 我正在尝试应用多标签分类
- c++ - 如何在 Xlib 中使用 Xutf8LookupString 忽略控制字符?
- mysql - 如何仅获取连接表的最大值?
- python - 为什么我在终端上安装的软件包不能在 Spyder 上运行
- python - 如何在空的高山容器上安装 python