В разрешении отказано после входа в приложение Angular AngularFire

# #javascript #ionic-framework #google-cloud-firestore #firebase-security #angularfire2

Вопрос:

Когда я пытаюсь получить доступ к базе данных после успешного входа в систему пользователя, я получаю ошибку

разрешение, указанное в /профили/N97wiXBCMxhB06qQXJ2Bvhcjnts1: У клиента нет разрешения на доступ к нужным данным.

Поскольку я только что аутентифицировал пользователя, я не понимаю, как у пользователя не будет разрешения. Еще одно странное поведение заключается в том, что оно срабатывает во второй раз, когда я нажимаю кнопку «Войти», которая вызывает функцию signIn(singInForm).

вход.страница.ts

  signIn(signInForm) {
    this.authService.signInWithEmailAndPassword(signInForm.email, signInForm.password)
    .then(res => {
      const userID = res.user.uid;
      this.fbBackendService.fetchUserProfile(userID).subscribe(userProfile => {
        // DO SOMETHING using the userID
      }, error => {
        // DO SOMETHING
      });
    }).catch(error => {
      // DO SOMETHING
    });
  }
 

fb-серверная часть.сервис.ts

 constructor(private db: AngularFireDatabase) { }

 
 fetchUserProfile(userID): Observable<IUserProfile> {
    return this.db.object(`/profiles/${userID}`)
      .valueChanges()
      .pipe((take(1), map((response: any) => response as IUserProfile)));
  }
 

Вот соответствующий набор правил:

 {
  "rules": {
    ".write": false,
    ".read": false,
    "profiles": {
      "$uid": {
       ".read": "auth.uid === $uid",
       ".write": "auth.uid === $uid",
       ".indexOn": "company_id"
      }
    }
  }
}
 

Комментарии:

1. Какие правила установлены для вашей базы данных? Можете ли вы добавить эту информацию к своему вопросу?

2. @RichTillis Я добавил набор правил к вопросу. Спасибо.

3. Я воссоздал ошибку в точности так, как вы ее описали. Ошибка входа в систему в первый раз, но во второй раз это удается. Я не уверен, является ли это правилом, или обещанием, или сочетанием того и другого. Я буду продолжать заниматься этим вопросом.

Ответ №1:

Вы можете попробовать понизить рейтинг до firebase 8.3.0. Похоже, возникла проблема с более новыми версиями.