Angularfire2 показывает ошибку «Отсутствуют разрешения», в то время как прямая база данных работает без проблем - PullRequest
0 голосов
/ 24 июня 2019

AngularFire2, похоже, обрабатывает разрешения иначе, чем чистый firebase sdk.

Действия по воспроизведению этой проблемы:

  • Вход в учетную запись пользователя
  • Выполнение вызовачтобы получить документ пожарного хранилища для пользователя:
return this.afStore.doc('users/' + authId).valueChanges()
  .pipe(map(u => {
    if (u) {
      return new User(u);
    }
    return null;
  })
);
  • Выйдите из этой учетной записи пользователя и затем войдите в другую учетную запись пользователя
  • Сделайте тот же вызовполучить документ пожарного хранилища для нового пользователя
  • На этот раз возвращается Missing or insufficient permissions ошибка

Если я добавлю код для firebase непосредственно в мой файл index.html, он работает, хотя:

var email = "xxx@xxx.com";
var password = "xxx";
var firebaseConfig = {...};

firebase.initializeApp(firebaseConfig);

firebase.auth().onAuthStateChanged((u) => {
  if (u) {
    firebase.firestore().doc('users/' + u.uid).get()
      .then(u => console.log("Got favorites", u.data()));
    firebase.firestore().doc('favorites/' + u.uid).get()
      .then(u => console.log("Got favorites", u.data()));
  }
});

firebase.auth().signInWithEmailAndPassword(email, password).then(cred => {
  console.log("Signed in", cred)
})

Мои правила Firebase следующие, но они кажутся в симуляторе нормальными и, очевидно, иногда работают с интерфейсом:

service cloud.firestore {
  match /databases/{database}/documents {

    function internalGetUserFromReq() {
      return get(/databases/$(database)/documents/users/$(request.auth.uid))
    }

    //...

    match /users/{userID} {
      allow read, write: if internalGetUserFromReq().data.authId == userID;
      allow read, write: if internalGetUserFromReq().data.role == 0;
    }
}
...