Я пытаюсь безопасно создать документ Firestore, не требуя аутентификации пользователя, и для этого определил следующее правило:
allow create: if request.resource.data.deviceid == resource.id;
Согласно тому, что я прочитал от Google, это должно позволить создать документ, если ожидающая запись включает поле с именем DeviceID, которое соответствует идентификатору документа, что, как я думаю, я делаю (я подтвердил, что androidID идентичен идентификатору документа):
data.put("DeviceID", androidID);
mDevIDDocRef.set(data)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "DocumentSnapshot successfully written!");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error writing document", e);
}
});
Однако вышеперечисленное не работает с исключением разрешения. Что я делаю неправильно?
Во время оценки правила создания ресурс еще не существует, поэтому вам нужно прочитать его будущее значение: request.resource.data.whatever
Чтобы получить доступ к автоматически сгенерированному идентификатору документа, вам необходимо прочитать его из пути к документу :