Java Firebase用户注册问题

Java Firebase用户注册问题,java,android,firebase,Java,Android,Firebase,嘿,伙计们,我正在为我的应用程序设置用户注册,注册本身工作正常。就像电子邮件和密码保存在我的Firebase身份验证部分一样,但我正在尝试将其设置为同时存储用户名。我拥有的代码对我来说似乎很好,但它不会在我的Firebase中创建包含任何保存的用户信息(如用户名)的数据库 这是我用来注册用户的代码 firebaseAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCom

嘿,伙计们,我正在为我的应用程序设置用户注册,注册本身工作正常。就像电子邮件和密码保存在我的Firebase身份验证部分一样,但我正在尝试将其设置为同时存储用户名。我拥有的代码对我来说似乎很好,但它不会在我的Firebase中创建包含任何保存的用户信息(如用户名)的数据库

这是我用来注册用户的代码

        firebaseAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {
                //start profile activity here

                User user = new User(username, email);

                FirebaseDatabase.getInstance().getReference("Users")
                        .child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                        .setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isSuccessful()) {
                                    Toast.makeText(RegisterActivity.this, "Registration successful.", Toast.LENGTH_SHORT).show();
                                    startActivity(new Intent(RegisterActivity.this, HomePage.class ));
                                } else {
                                    Toast.makeText(RegisterActivity.this, "Database not created", Toast.LENGTH_SHORT).show();
                                }
                            }
                        });
            } else {
                Toast.makeText(RegisterActivity.this, "Registration not successful, please try again.", Toast.LENGTH_SHORT).show();
                progressDialog.hide();
            }
        }
    });
firebaseAuth.createUserWithEmailAndPassword(电子邮件,密码)。添加OnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
//在此处启动配置文件活动
用户=新用户(用户名、电子邮件);
FirebaseDatabase.getInstance().getReference(“用户”)
.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.setValue(用户).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Toast.makeText(RegisterActivity.this,“注册成功”,Toast.LENGTH_SHORT.show();
startActivity(新意图(RegisterActivity.this、HomePage.class));
}否则{
Toast.makeText(RegisterActivity.this,“未创建数据库”,Toast.LENGTH_SHORT.show();
}
}
});
}否则{
Toast.makeText(RegisterActivity.this,“注册未成功,请重试。”,Toast.LENGTH_SHORT.show();
progressDialog.hide();
}
}
});
当我尝试注册一个帐户时,它会显示“数据库未创建”,所以我知道task.issusccessful()不是真的,我也不知道为什么

有什么帮助吗?

将规则更改为:

{
 "rules": {
   ".read": true,
   ".write": true
  }
}
我使用了task.getException(),异常是“权限被拒绝”

这意味着你没有通过Firebase的认证。您可以将Firebase规则向所有人开放:

{
 "rules": {
   ".read": true,
   ".write": true
  }
}
这对安全性来说不是个好主意

默认情况下,对数据库的读写访问受到限制,因此 只有经过身份验证的用户才能读取或写入数据。开始 在不设置身份验证的情况下,您可以为配置规则 公众访问。这确实使您的数据库向任何人开放,甚至 有人不使用你的应用程序,因此请确保再次限制你的数据库 当您设置身份验证时。

或者,通过在中登录用户,然后执行
setValue()
或数据库中的任何操作,向注册用户进行身份验证

使用

阅读:


和。

将帮助我们双方了解实际错误。我使用了task.getException(),异常为“权限被拒绝”。您好,感谢您的回复。我是Firebase的新手,所以如果我在简单的事情上遇到麻烦,我很抱歉!但我在Firebase中查看了我的规则,看到了::service cloud.firestore{match/databases/{database}/documents{match/{document=**}{allow read,write:if false;}}}那么,我需要做的就是把假变真吗?或者我需要把你给我看的代码放在这里的某个地方吗?没关系,不用道歉!检查此项,因为我认为您正在使用实时数据库。您在评论部分提供的规则是针对firestore的,firestore是另一项服务。这是一项违反安全的行为,实际上仅用于测试目的是一个好主意。但是你没有考虑发布版本,谢谢你修复了我的问题!我将在将来研究其他方法,这样不会妨碍我的应用程序的安全性,但现在它是完美的!因此,我已经解决了由于许可被拒绝而导致注册失败的最初问题。但现在我已经公开了,这阻碍了应用程序的安全性,就像你说的,它允许用户注册用户名和他们的电子邮件。那么,有没有更安全的方法让用户使用用户名登录并将其保存到Firebase数据库中?是的。这就是为什么我在回答的第二部分添加了最好的方法。检查。实际上,你不应该更改规则,因为你也将发布该应用程序,因此,你需要再次验证用户身份,而你接受的答案只是一个解决办法。但是,我回答的第二部分是你解决所有问题的实际答案。另外,将规则设置为“当用户像规则一样进行身份验证时”。