即使规则已打开,Ionic AngularFireDatabase仍未获得授权

时间:2018-05-16 00:36:44

标签: angular firebase ionic-framework angularfire2

概述

我正在尝试从firebase数据库获取数据,但它表示我没有权限,即使规则是完全开放的。

我按照this youtube tutorial开始构建当前的实现。使用已弃用的FirebaseListObservable遇到错误后,我根据this update information更改了我的提供程序。我还尝试使用默认的打开Firebase规则以及他们在the Firebase documentation中为“全部允许”推荐的规则。

提供商

provider code

错误消息

Error Message

Firebase规则

规则的默认开放版本也不起作用,行为allow read, write;

Firebase Rules

数据库

The Data

其他可能相关的信息

以与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

2 个答案:

答案 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);
    }