我遇到了Firebase實時數據庫規則的問題。我註冊了一個新用戶mAuth.createUserWithEmailAndPassword(email, password)
。在onCompleteMethod
我想在實時數據庫中添加我自己的用戶對象。 我正在這樣做,因爲每個用戶都有額外的電子郵件/密碼信息。Firebase實時數據庫規則不允許通過身份驗證的用戶寫入
後我檢查
FirebaseUser fireUser = FirebaseAuth.getInstance().getCurrentUser();
if(fireUser == null) {
//do something
} else {
createNewUser(fireUser);
}
方法
private void createNewUser(FirebaseUser fireUser) {
// Build the user-object.
User user = new User();
user.setUserId(fireUser.getUid());
user.setUsername(name);
user.setSex(sex);
user.setEmail(email);
user.setAge(time);
user.setImageUri("");
// Create database connection and reference.
DatabaseReference mDatabaseRef = FirebaseDatabase.getInstance().getReference();
mDatabaseRef.child("users").child(fireUser.getUid()).setValue(user);
}
被調用。但出於某種原因這個DatabaseError拋出:
W/RepoOperation: setValue at /users/9i6loj4BlCWkgkXOULWxbCSlvnx1 failed: DatabaseError: Permission denied
根據我的理解,如果FirebaseUser不爲空 - 他登錄並在火力地堡
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
將允許用戶聲明,所以我的規則編寫數據庫。但是,當我將規則更改爲".read": "true"
和".write": "true"
時,此代碼正常工作。
所以我的問題是:我在這裏做錯了什麼?我只想要認證用戶讀/寫。
感謝您的幫助!
編輯
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
loadingPanel.setVisibility(View.GONE);
} else {
loadingPanel.setVisibility(View.GONE);
FirebaseUser fireUser = FirebaseAuth.getInstance().getCurrentUser();
if(fireUser == null) {
Toast.makeText(getApplicationContext(), "User is null", Toast.LENGTH_SHORT).show();
}
// Send verification mail
sendVerificationEmail(fireUser);
// Create a new User!
createNewUser(fireUser);
//start intent and sign out.
Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
FirebaseAuth.getInstance().signOut();
startActivity(intent);
finish();
}
}
你能更新你的文章以包含你的'onComplete()'方法的主體嗎?這將更清楚執行'createNewUser()'的路徑。 –
我添加了onComplete方法。我希望它有幫助! – Hnig