[英]DatabaseError: Permission denied firebase
我是火力基地的新手。 我想在我的應用程序中使用 firebase 讀取/寫入數據,但是當我嘗試這樣做時,我收到此DatabaseError: Permission denied
錯誤。
Firebase 上的規則文件
{
"rules": {
"sos":{
".read":"auth != null",
".write":"auth != null"
}
}
}
代碼文件
Firebase authFirebaseRef = new Firebase(ApiConstants.FIREBASE_MY_URL);
authFirebaseRef.authWithCustomToken(AppConstants.FBT, authResultHandler);
Firebase.AuthResultHandler authResultHandler = new Firebase.AuthResultHandler() {
@Override
public void onAuthenticated(AuthData authData) {
Log.v("onAuthenticated", authData.getUid());
addEvents();
}
@Override
public void onAuthenticationError(FirebaseError firebaseError) {
Log.v("onAuthenticationError= ", "FirebaseError= " + firebaseError.toString());
}
};
private void addEvents() {
mFirebaseDatabase = mFirebaseInstance.getReference("sos").child("emergencyservices");
mFirebaseDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
emergencyServicesList.clear();
for (DataSnapshot dataSnapshotChild : dataSnapshot.getChildren()) {
Log.v("onDataChange", ":" + dataSnapshotChild.child("emergencyServicesName").getValue());
EmergencyServiceModel emergencyServiceModel = new EmergencyServiceModel();
emergencyServiceModel.setEmergencyServiceId(dataSnapshotChild.child("emergencyServicesId").getValue().toString());
emergencyServiceModel.setEmergencyServiceName(dataSnapshotChild.child("emergencyServicesName").getValue().toString());
emergencyServicesList.add(emergencyServiceModel);
}
loadDataToRecyclerView();
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.v("DatabaseError", databaseError.getMessage());
}
});
}
早些時候,我通過將.true
保持為read/write
在sos/emergencyservices
添加了一些記錄。 但是現在我必須通過身份驗證來更改它。
我認為您使用不同的 firebase 對象進行身份驗證,使用不同的 firebase 對象進行查詢。
嘗試這個
authFirebaseRef.getRoot().child("sos/emergencyservices").addValueEventListener(new ValueEventListener() { ... };
代替
mFirebaseDatabase = mFirebaseInstance.getReference("sos").child("emergencyservices");
mFirebaseDatabase.addValueEventListener(new ValueEventListener() { ... };
此外,您使用的是舊版本的 firebase API。 我向你推薦這個鏈接。 該文檔將指導您將現有的 Firebase.com 應用升級到新的 Firebase 控制台和 API。
截至 2018 年底,我們還有一個“權限被拒絕”錯誤的來源。
Google 剛剛推出了 Cloud Firestore BETA。
關鍵是它的界面與 Firebase 相同,只有一個下拉選擇器來分隔兩個數據庫......
花了 8 小時的錯誤,終於發現默認的控制台視圖是 Cloud Firestore BETA 視圖而不是 Firebase。
因此,當我配置 Cloud Firestore BETA 時,我的應用會與 Firebase 通信。
8h 迷路了……謝謝谷歌……
在附加偵聽器之前,您需要確保用戶已登錄。 由於您已經在偵聽身份驗證狀態,因此只需將附加偵聽器的代碼移動到onAuthenticated
回調中即可:
Firebase.AuthResultHandler authResultHandler = new Firebase.AuthResultHandler() {
@Override
public void onAuthenticated(AuthData authData) {
Log.v("onAuthenticated", authData.getUid());
addEvents();
mFirebaseDatabase = mFirebaseInstance.getReference("sos").child("emergencyservices");
mFirebaseDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
emergencyServicesList.clear();
for (DataSnapshot dataSnapshotChild : dataSnapshot.getChildren()) {
Log.v("onDataChange", ":" + dataSnapshotChild.child("emergencyServicesName").getValue());
EmergencyServiceModel emergencyServiceModel = new EmergencyServiceModel();
emergencyServiceModel.setEmergencyServiceId(dataSnapshotChild.child("emergencyServicesId").getValue().toString());
emergencyServiceModel.setEmergencyServiceName(dataSnapshotChild.child("emergencyServicesName").getValue().toString());
emergencyServicesList.add(emergencyServiceModel);
}
loadDataToRecyclerView();
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.v("DatabaseError", databaseError.getMessage());
}
});
}
@Override
public void onAuthenticationError(FirebaseError firebaseError) {
Log.v("onAuthenticationError= ", "FirebaseError= " + firebaseError.toString());
}
};
它與數據庫有關,因此在 firebase 控制台中進入數據庫並將規則設置為 true 以進行讀/寫
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.