База данных Firebase в реальном времени — у клиента нет разрешения на доступ к нужным данным

# #javascript #angular #ionic-framework #firebase-realtime-database #firebase-security

Вопрос:

У меня есть приложение (ионный угловой конденсатор 2), вызывающее какой-либо объект в базе данных Firebase в реальном времени. Он прекрасно работает с правилами доступа и анонимной аутентификацией. Но после обновления некоторых модулей (не знаю, в чем проблема) мне отказывают в разрешении при вызове бд. Это происходит как в Интернете, так и на ios/Android. Я прочитал все страницы из Google и здесь. Но в основном проблема заключается в правилах 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 amp;amp; auth.provider != 'anonymous'"
    },
    "settings": {
        ".read": "auth.uid != null",
        ".write": "auth.uid != null amp;amp; auth.provider != 'anonymous'"
    },
    "routes": {
        ".read": "auth.uid != null",
        ".write": "auth.uid != null amp;amp; auth.provider != 'anonymous'"
    },
    "campaigns": {
        ".read": "auth.uid != null",
        ".write": "auth.uid != null amp;amp; 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
 

Это так расстраивает… Надеюсь, что есть кто-то с логическим представлением о проблеме 🙂

Ответ №1:

Наконец я нашел проблему. Как упоминалось в начале, были обновлены некоторые плагины. (После того, как попробовал новый плагин). Итак, после долгих часов отладки. Я понизил рейтинг до Firebase 8.1.2 и @angular/fire до 6.1.5.Все снова заработало..