У меня есть правила firestore, такие как:
match /{document=**} {
allow read, write: if request.auth.token.name == "dummyUser";
}
Я вошел в систему от анонимного пользователя, и по завершении я установил имя (скажем, "dummyUser"). Вот код:
func signInUserAnonymously(callback: @escaping ((Bool) )->Void){
print("2124.AuthFirebaseHelper: Signing in user anonymously")
Auth.auth().signInAnonymously() { (authResult, error) in
if let error = error {
print("2124.AuthFirebaseHelper: Sign in failed:", error.localizedDescription)
} else {
print ("2124.AuthFirebaseHelper: Signed in successfully anonymously")
// set users name (to allow database reads)
let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest()
changeRequest?.displayName = "dummyUser"
changeRequest?.commitChanges { (error) in
callback(true)
})
}
}
}
Теперь, когда я проверяю отображаемое имя пользователя в коде, я вижу, что оно успешно изменено на "dummyUser". Тем не менее, запрос пожарного хранилища не работает, и я получаю сообщение в журнале:
Отсутствует или недостаточно разрешений.
Вот мой запрос:
let docRef = Firestore.firestore().collection(Constants.DB_VALUES_COLLECTION).document(Constants.DB_GLOBAL_VALUES_DOCUMENT)
docRef.getDocument { (document, error) in
if let document = document, document.exists {
let dataDescription = document.data().map(String.init(describing:)) ?? "nil"
print("Document data: \(dataDescription)")
} else {
print("Document does not exist")
}
}
Когда я удаляю это правило (и разрешаю всем читать), оно работает. Почему это не позволяет мне читать из базы данных, если это отображаемое имя пользователя. Я попытался позвонить:
Auth.auth().currentUser?.reload()
, но он все еще не работает.
Это нормально работает на Android и только на ios (с использованием swift), у меня есть эта проблема.
Спасибо