Использование AngularFire Auth для ограничения доступа к AngularFireDatabase - PullRequest
0 голосов
/ 06 ноября 2019

Я хочу сделать приложение с Angular и Firebase. Я хочу ограничить доступ на чтение и запись для моей базы данных для одного пользователя. Поэтому я сделал это правило.

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if "auth.uid === 'gzL3tHnx6JQexMuK4h2Nyo0thHS2'"
    }
  }
}

Эта причина, как и ожидалось, ошибка отказа в разрешении.

Framework делает действительно простым запись и получение данных из базы данных, регистрацию пользователей и созданиеавторизоваться. К сожалению, фреймворк не использует HTTP-перехватчики для добавления кредитов. на запрос. Может как-то объединить AngularFirestore и AngularFire Auth Методы. Пример реализации ниже:

export class AppComponent {
  private shirtCollection: AngularFirestoreCollection<Shirt>;
  shirts: Observable<ShirtId[]>;
  constructor(private readonly afs: AngularFirestore) {
    this.shirtCollection = afs.collection<Shirt>('shirts');
    // .snapshotChanges() returns a DocumentChangeAction[], which contains
    // a lot of information about "what happened" with each change. If you want to
    // get the data and the id use the map operator.
    this.shirts = this.shirtCollection.snapshotChanges().pipe(
      map(actions => actions.map(a => {
        const data = a.payload.doc.data() as Shirt;
        const id = a.payload.doc.id;
        return { id, ...data };
      }))
    );
  }

private socialSignIn(provider: number): firebase.Promise<FirebaseAuthState> {
  return this.af.auth.login({AuthProviders.Github, method: AuthMethods.Popup})
    .then(() => this.updateUserData() )
    .catch(error => console.log(error));
}

}

1 Ответ

0 голосов
/ 06 ноября 2019

Ваш синтаксис неверен. Удалите кавычки вокруг условия, измените === на ==, добавьте точку с запятой и обратитесь к идентификатору пользователя с помощью request.auth.uid:

allow read, write: if request.auth.uid == "gzL3tHnx6JQexMuK4h2Nyo0thHS2";

Пожалуйста, внимательно ознакомьтесь с документацией для дополнительных примеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...