Firebase用户注册问题

时间:2018-10-17 20:33:26

标签: java android firebase

嘿,我正在为我的应用设置用户注册,注册本身可以正常工作。就像电子邮件和密码保存在我的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();
            }
        }
    });

当我尝试注册一个帐户时,它会显示“未创建数据库”,因此我知道task.isSuccessful()是不正确的,并且我不确定为什么。

有帮助吗?

2 个答案:

答案 0 :(得分:1)

将规则更改为:

Password:
PassLM          F5314AF8A2DB16BDB7EE9FA6CFC5BC9A
PassNT          4EC02E0D65F8F0C1A9386C69CB6A2555
PassNTLMv2      28B089518C6573274C6B9D83D0EB8651 

答案 1 :(得分:0)

  

我使用了task.getException(),例外是“权限被拒绝”

这意味着您没有通过Firebase的身份验证。您可以使Firebase规则向所有人开放:

{
 "rules": {
   ".read": true,
   ".write": true
  }
}

这不是个好主意

  

默认情况下,对数据库的读写访问权限受到限制,因此   只有经过身份验证的用户才能读取或写入数据。开始   无需设置身份验证,您可以为   公共访问。这确实使您的数据库对所有人开放,甚至   人们没有使用您的应用程序,因此请确保再次限制您的数据库   设置身份验证时。   https://firebase.google.com/docs/database/android/read-and-write

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

使用signInWithEmailAndPassword

阅读:Android Firebase sign in with email and password

还有sample

相关问题