我正在尝试从firebase数据库获取数据,但它表示我没有权限,即使规则是完全开放的。
我按照this youtube tutorial开始构建当前的实现。使用已弃用的FirebaseListObservable遇到错误后,我根据this update information更改了我的提供程序。我还尝试使用默认的打开Firebase规则以及他们在the Firebase documentation中为“全部允许”推荐的规则。
规则的默认开放版本也不起作用,行为allow read, write;
以与1 minute into the mentioned youtube tutorial相同的方式,我使用点击“将Firebase添加到您的网络应用”中的信息,在我的app.module.ts导入中调用initializeApp(firebaseConfig)
我正在使用我angularfire2@5.0.0-rc.8.0
安装的npm install angularfire2
。当我刚刚运行npm list
时,它给了我以下两个警告,这可能与问题有关。我正在使用@angular/common@5.2.10
和@angular/core@5.2.10
npm ERR! peer dep missing:@ angular / common @ ^ 6.0.0,由angularfire2@5.0.0-rc.8.0提供 错误的ERR! peer dep missing:@ angular / core @ ^ 6.0.0,angularfire2 @5.0.0-rc.8.0
答案 0 :(得分:1)
正如@ brenthompson2所提到的,我改为使用Firestore(beta)共享该方法
在app.module.ts
中import { AngularFirestoreModule } from 'angularfire2/firestore';
...
@ngModule({
...
imports: [
...
AngularFireModule.initializeApp(environment),
AngularFirestoreModule,
],
})
以及任何角度模块或注射剂
constructor(private store:AngularFirestore) {
}
...
this.store.doc<any>(`users/${uid}`).snapshotChanges().subscribe(
data=>{console.log(data.payload.data())}
);
与firebase2 /数据库没什么不同
答案 1 :(得分:0)
问题是,在Firebase信息中心内,我正在配置Cloud Firestore (BETA)
数据库,而不是Realtime Database
数据库。切换到使用正确的数据库并设置规则后,我能够使用基本的firebase库从存储和实时数据库中获取数据(不需要angularfire2)。
在此示例中,我获取根节点的快照,然后根据该节点的密钥迭代每个子节点的快照,并将.val()
存储到关联的阵列中。 (注意:新数据库中数据的布局与问题截图中的格式不同)
import * as firebase from 'firebase';
...
guardiansList: any = [];
warriorsList: any = [];
prayersList: any = [];
...
try {
firebase.database().ref().once('value', (snapshot) => {
snapshot.forEach((categorySnap) => {
switch (categorySnap.key) {
case "guardians":
categorySnap.forEach((imgSnap) => {
this.guardiansList.push(imgSnap.val());
return false;
});
break;
case "warriors":
categorySnap.forEach((imgSnap) => {
this.warriorsList.push(imgSnap.val());
return false;
});
break;
case "prayers":
categorySnap.forEach((imgSnap) => {
this.prayersList.push(imgSnap.val());
return false;
});
break;
default:
console.log("Found Unknown Key");
break;
}
return false;
});
});
}
catch (e) {
console.log(e);
}