Вход в Firebase с помощью guid - PullRequest
0 голосов
/ 22 января 2020

Я не уверен в правильном способе обеспечения безопасности вокруг базы данных Firebase. В настоящее время существует две веб-страницы, с которыми взаимодействует пользователь. Первое - это стандартное веб-приложение, в которое они входят со стандартными учетными данными. В веб-приложении они могут создавать записи в пожарном депо со своим идентификатором пользователя и полезной нагрузкой.

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

Мой вопрос заключается в том, как создать правила безопасности для этой базы данных, чтобы только зарегистрированные пользователи могли создавать записи. для себя. И для записи веб-страницы, чтобы иметь возможность доступа к ним без получения надлежащих учетных данных электронной почты / пароля. В настоящее время у меня есть что-то вроде этой настройки. но я знаю, что это не правильно:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {


    /* example record:
       {
          soundBoards: { Bunch of stuff...  },
          userid: "DM74aTGjAUZ1Tbq8uJ7ZM9igzmw2", <--- this matches the Auth User UID
          accessid: "067170e1-2c6b-4d6b-81d2-3e7c49618fc6"
       }
    */
    match /users/{userId} { // user records hold personalization info that can be updated and changed
        allow create: if request.auth.uid != null;
      allow read, update: if request.auth.uid == userId.userid;
    }

    match /Sounds/{soundId} { // any logged in user can access all sounds for now, no creating or updating as of yet
        allow read: if request.auth.uid != null;
    }

    /* example record:
       {
          sound: {Name: "asdf", URL: "asdf", id: "asdf"},
          uid: "DM74aTGjAUZ1Tbq8uJ7ZM9igzmw2" <-- the user that initiated the sound to be played
       }
    */
    match /SoundsToPlay { // these are the records that get created by the webapp and then read by the recording webpage
        allow read: if request.auth.uid != null;
      allow write: if request.auth.uid != null;
    }
  }
}
...