嘿,我正在为我的应用设置用户注册,注册本身可以正常工作。就像电子邮件和密码保存在我的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()是不正确的,并且我不确定为什么。
有帮助吗?
答案 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()
或数据库中的任何操作。
阅读:Android Firebase sign in with email and password
还有sample。