[英]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.