使用访问规则中的字段写入 Firestore 时缺少权限或权限不足
Missing or insufficient permissions when writing to Firestore using field in access rules
我在尝试写入 Firestore 时遇到错误。
我正在尝试使用包含用户 uid 的字段作为我的安全规则。
service cloud.firestore {
match /databases/{database}/documents {
match /messages/{document=**} {
allow read: if resource.data.user_uid == request.auth.uid;
allow write: if resource.data.user_uid == request.auth.uid;
}
}
}
如果我的 Firestore 数据库中有数据,读取规则工作正常 - 但当我尝试写入时,我得到:Error: Missing or insufficient permissions.
这个写入规则有什么问题吗?
P.S。如果我将我的规则更改为此,我可以写入我的数据库 - 但这对于我的目的来说不够安全:
match /messages/{document=**} {
allow read: if resource.data.user_uid == request.auth.uid;
allow write: if request.auth != null;
}
resource.data
指的是已存储的数据,因此您的规则只允许用户更新已包含其用户 ID 的数据。
您可能想要检查的是 request.resource.data
这是新的数据。
此处有关于这些字段和其他安全规则的相当详尽的文档:https://firebase.google.com/docs/firestore/security/rules-conditions
这个问题和接受的答案对我很有用。我最终使用了一组略有不同的规则,我将在这里分享这些规则,以防其他人发现它们有用。
与 OP 一样,我将用户 ID (uid
) 与我的资源一起存储。但是,当我想创建一个新资源时,还没有uid
。使用 example in the documentation 我最终得到了如下所示的安全规则:
service cloud.firestore {
match /databases/{database}/documents {
match /messages/{document=**} {
allow read, update, delete: if request.auth.uid == resource.data.uid;
allow create: if request.auth.uid != null;
}
}
}
您可以让您的数据库只供读取而不供写入:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if true;
allow write: if false;
}
}
}
对我来说,这组代码适用于 firestore 安全
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read,write: if true;
}
}
}
我在尝试写入 Firestore 时遇到错误。
我正在尝试使用包含用户 uid 的字段作为我的安全规则。
service cloud.firestore {
match /databases/{database}/documents {
match /messages/{document=**} {
allow read: if resource.data.user_uid == request.auth.uid;
allow write: if resource.data.user_uid == request.auth.uid;
}
}
}
如果我的 Firestore 数据库中有数据,读取规则工作正常 - 但当我尝试写入时,我得到:Error: Missing or insufficient permissions.
这个写入规则有什么问题吗?
P.S。如果我将我的规则更改为此,我可以写入我的数据库 - 但这对于我的目的来说不够安全:
match /messages/{document=**} {
allow read: if resource.data.user_uid == request.auth.uid;
allow write: if request.auth != null;
}
resource.data
指的是已存储的数据,因此您的规则只允许用户更新已包含其用户 ID 的数据。
您可能想要检查的是 request.resource.data
这是新的数据。
此处有关于这些字段和其他安全规则的相当详尽的文档:https://firebase.google.com/docs/firestore/security/rules-conditions
这个问题和接受的答案对我很有用。我最终使用了一组略有不同的规则,我将在这里分享这些规则,以防其他人发现它们有用。
与 OP 一样,我将用户 ID (uid
) 与我的资源一起存储。但是,当我想创建一个新资源时,还没有uid
。使用 example in the documentation 我最终得到了如下所示的安全规则:
service cloud.firestore {
match /databases/{database}/documents {
match /messages/{document=**} {
allow read, update, delete: if request.auth.uid == resource.data.uid;
allow create: if request.auth.uid != null;
}
}
}
您可以让您的数据库只供读取而不供写入:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if true;
allow write: if false;
}
}
}
对我来说,这组代码适用于 firestore 安全
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read,write: if true;
}
}
}