繁体   English   中英

Firebase 实时数据库 - 客户端无权访问所需数据

[英]Firebase Realtime Database - Client doesn't have permission to access the desired data

我有一个应用程序(离子 Angular 电容器 2)在 Firebase 实时数据库中调用一些 object。 它在访问规则和匿名身份验证方面运行良好。 但是在一些模块更新后(不知道这是否是问题)我在调用数据库时被拒绝权限。 这发生在 web 和 ios/android 上。 我已经阅读了谷歌和这里的所有页面。 但主要问题是 Realtime db 上的 firestore 规则或通过将.read/.write 规则设置为 true 来解决。

这是在创建或登录用户时调用 OnInit() 的身份验证,调用 continueLoad():

async loginAndLoad() {
  // create anonymous user if not exists and/or log in
 await this.fireauth.signInAnonymously().catch((error) => {
     console.log('Login error: ' + error.code);
     console.log('Login error message: ' + error.message);
  });
 // trigger state change, when user is logged in
  this.fireauth.onAuthStateChanged((user) => {
 
    if (user.isAnonymous) {
      var isAnonymous = user.isAnonymous;
      var uid = user.uid;
      console.log('User added: ' + isAnonymous);
      console.log('User uid: ' + uid);
      // We have a signed in user, go on.. Else throw error
         this.continueLoad();
    } else {
          this.loginAndLoad();
        }
  });
}

数据库调用示例,我从 this.continueLoad() 调用:

async getElements() {
     const elements = this.db.list('settings/elements/da/');
     const subscribe = await elements.snapshotChanges().subscribe(res => {
           subscribe.unsubscribe();
       let array = [];
       res.forEach(child => {
         let a: any;
          a = child.payload.toJSON();
           if (a.status == "published") {
            array.push({key: child.key,title: a.title});
          }
       })
        this.storage.set('elements', JSON.stringify(array));
     })
}

这是实时数据库规则:

{
  "rules": {
    ".write": "!data.exists()",
    "products": {
        ".read": "auth.uid != null",
        ".write": "auth.uid != null",
        ".indexOn": ["stats", "status", "user_warn", "image_approved", "image_added", "note", "description","title","date_published","date_edited","date_added"]
    },
    "searchwords": {
        ".read": "auth.uid != null",
        ".write": "auth.uid != null"  
    },
    "users": {
        ".read": "auth.uid != null",
        ".write": "auth.uid != null && auth.provider != 'anonymous'"
    },
    "settings": {
        ".read": "auth.uid != null",
        ".write": "auth.uid != null && auth.provider != 'anonymous'"
    },
    "routes": {
        ".read": "auth.uid != null",
        ".write": "auth.uid != null && auth.provider != 'anonymous'"
    },
    "campaigns": {
        ".read": "auth.uid != null",
        ".write": "auth.uid != null && auth.provider != 'anonymous'"
    }  
  }
}

这是离子信息:

Ionic:

   Ionic CLI                     : 6.16.1 (/usr/local/lib/node_modules/@ionic/cli)
   Ionic Framework               : @ionic/angular 5.6.7
   @angular-devkit/build-angular : 0.1100.7
   @angular-devkit/schematics    : 11.0.7
   @angular/cli                  : 11.0.7
   @ionic/angular-toolkit        : 3.1.1

Capacitor:

   Capacitor CLI      : 2.4.6
   @capacitor/android : 2.4.7
   @capacitor/core    : 2.4.6
   @capacitor/ios     : 2.4.7

Utility:

   cordova-res : 0.15.3
   native-run  : 1.3.0

System:

   NodeJS : v14.17.0 (/usr/local/bin/node)
   npm    : 6.14.13
   OS     : macOS Big Sur

这太令人沮丧了......希望有人对这个问题有逻辑想法:)

最后我发现了问题。 如开头所述,som 插件已更新。 (尝试新插件后)。 所以经过数小时的调试。 我降级到 Firebase 8.1.2 和 @angular/fire 到 6.1.5 一切都恢复正常了..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM