Являются ли эти правила firebase и запросы PUT и GET правильными? (Angular Firebase)

#angular #typescript #firebase

#angular #typescript #firebase

Вопрос:

Я хочу, чтобы пользователь видел только свои собственные сообщения, и никто не должен получать доступ к его сообщениям. Аутентификация публикация уже возможна и работает. Но без ограничений firebase.

Для firebase я планирую использовать эти правила. Это нормально?

 {
  "rules": {
    "notes": {
      "$uid": {
        ".read": "auth != null amp;amp; auth.uid == $uid",
        ".write": "auth != null"
      }
    }
  }
}
  

Поместить запрос в angular:

 this.http
      .put(
        'https://_____.firebaseio.com/notes.json?auth=<ID_TOKEN>',
        notes
      )
  

Получить запрос в angular (здесь в полной функции)

 loadNotes() {
    return this.http
      .get<Note[]>(
        'https://______.firebaseio.com/notes.json?auth=<ID_TOKEN>'
      )
      .pipe(
        map(notes => {
          return notes.map(note => {
            return {
              ...note
            };
          });
        }),
        tap(notes => {
          this.noteService.setNotes(notes);
        })
      );
  }
}
  

Я думаю, что наиболее важными моментами здесь являются ссылки на базу данных firebase и правила firebase.

Я действительно был бы признателен за помощь!! Спасибо.

Ответ №1:

Ваш put вызов пытается выполнить запись /notes , но ваши правила безопасности не предоставляют никому доступ на запись к этому узлу. Таким образом, правильная запись отклоняется.

Чтобы разрешить операцию записи, вам необходимо поместить данные в /notes/$uid :

   this.http
      .put(
        'https://_____.firebaseio.com/notes/uidOfUserInAuthToken.json?auth=<ID_TOKEN>',
        notes
      )
  

Здесь uidOfUserInAuthToken должен соответствовать UID пользователя, которого ID_TOKEN вы отправляете с запросом.

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

1. Это уже выглядит великолепно! Но есть еще одна проблема: несмотря на то, что в консоли <ID_TOKEN> заменяется идентификатором пользователя, я все равно получаю сообщение об ошибке: не удалось проанализировать токен аутентификации. В чем проблема сейчас? Я действительно не знаю, чего может не хватать.