我们正在访问火库来自我们的 Java 应用程序引擎实例。
非事务性请求成功成功,但事务性请求失败并出现错误:firestore: PERMISSION_DENIED: Missing or insufficient permissions
交易示例
final long updatedValue = 15;
Firestore db = firebaseManager.getFirestore();
CollectionReference fooCollectionRef = db.collection(SOME_COLLECTION);
DocumentReference fooDocumentRef = fooCollectionRef.document(fooId);
final ApiFuture<Long> future = db.runTransaction(transaction -> {
DocumentSnapshot snapshot = transaction.get(fooDocumentRef).get();
transaction.update(fooDocumentRef, SOME_FIELD, updatedValue);
return updatedValue;
});
return future.get();
据我所知,我们对开发项目的权限是完全开放的:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write;
}
}
}
根据我读到的内容,允许writes还应该允许事务更新工作,但它们和 sime 都不是get通话正常。
有谁知道我是否缺少一个步骤/设置了不正确的权限?
(我见过其他关于 Firestore 权限被拒绝错误的类似问题,但在这些情况下,规则更加具体。目前,该项目甚至不需要身份验证即可访问 Firestore。)
我遇到了同样的问题,但我设法解决了它。设置一个服务帐户并将您的 Firestore 实例指向该帐户。您可以创建服务帐户密钥here https://console.cloud.google.com/projectselector/apis/credentials。下面是一个示例代码块,展示了如何使用服务帐户。 SERVICE_ACCOUNT_PATH 是一个包含服务帐户路径的字符串,PROJECT_ID 是一个包含您的项目 ID 的字符串。
private static void authenticate() throws Exception {
FirestoreOptions firestoreOptions = FirestoreOptions.newBuilder()
.setCredentials(ServiceAccountCredentials.fromStream(new FileInputStream(SERVICE_ACCOUNT_PATH)))
.setProjectId(PROJECT_ID).build();
database = firestoreOptions.getService();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)