Как управлять правилами безопасности базы данных Firebase для входа в систему впервые, когда еще нет зарегистрированных пользователей? - PullRequest
1 голос
/ 04 мая 2020

Это мои правила базы данных:

service cloud.firestore {
  match /databases/{database}/documents {
    // Make sure the uid of the requesting user matches name of the user
    // document. The wildcard expression {userId} makes the userId variable
    // available in rules.
    match /user/{userId} {
      allow read, write: if request.auth.uid != null; 
    }

    match /user/{userId} {
      allow create, read, write, update, delete: if request.auth.uid == userId;
    }

    match /{document=**} {
      allow create, read, write, update, delete: if request.auth.uid != null;
    }
  }
}

Как видите, пользователь должен получить auth.uid, чтобы получить доступ к documents моей базы данных.

match /{document=**} {
  allow create, read, write, update, delete: if request.auth.uid != null;
}

Но проблема в том, что когда у меня нет пользователя, зарегистрированного в моей Аутентификации (и в Документе /user/{userId}), и кто-то пытается войти в систему, я не могу получить какой-либо ответ об ограничении разрешений. Как мне установить правила безопасности, чтобы я мог проверить, существует ли пользователь на самом деле или нет в процессе входа в систему?
Большое спасибо.
PS: Это работает отлично, если у меня хотя бы один зарегистрированный пользователь мой автор.

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Правила безопасности не знают или не заботятся, есть ли пользователи, зарегистрированные в вашем приложении. Они просто предъявляют требования к доступу к данным. Если для ваших правил требуется зарегистрированный пользователь, то это требование - обойти его невозможно.

Если некоторые из ваших данных должны быть доступны без входа в систему, у вас не может быть требования, что request.auth заполняется данными пользователя.

0 голосов
/ 04 мая 2020

По предложению Дуга Стивенсона я удалил request.auth.uid из /user/{userId} и удалил read из того же узла при следующей проверке, и он работает.
Большое спасибо.

Полный ответ:

service cloud.firestore {
  match /databases/{database}/documents {
    // Make sure the uid of the requesting user matches name of the user
    // document. The wildcard expression {userId} makes the userId variable
    // available in rules.
    match /user/{userId} {
      allow read; 
    }

    match /user/{userId} {
      allow create, write, update, delete: if request.auth.uid == userId;
    }

    match /{document=**} {
      allow create, read, write, update, delete: if request.auth.uid != null;
    }
  }
}
...