如何编写 Firestore 规则以匹配文档中的电子邮件字段
How write Firestore rule to match email field in document
我的 'myCollection' 文档中有一个标记为 'email' 的字段,我正在尝试编写一个 firestore 规则以允许在登录用户的电子邮件记录与记录。我将我的规则编码如下:
match /myCollection/{email} {
allow delete : if request.auth != null && request.auth.token.email == email;
}
这不允许删除匹配的记录。建议将不胜感激,因为虽然这个问题在 Whosebug 上被问了很多次,但我看到的答案是矛盾的,其中 none 对我有用。
我正在“游乐场”中对此进行测试,如果我将 'location' 设置为 myCollection/{documents = **},规则将失败。请参阅下面的屏幕截图:
我程序中的删除代码为:
const myCollectionCol = collection(db, 'myCollection');
const myCollectionQuery = query(myCollectionCol, where("email", "==", email));
const myCollectionSnapshot = await getDocs(myCollectionQuery);
myCollectionSnapshot.forEach((doc) => {
deleteDoc(doc.ref);
});
您正在触发一个查询 returns 所有具有字段 email
且值等于 email 变量的文档:
query(myCollectionCol, where("email", "==", email))
但是您的规则只允许删除其*文档 ID 等于其身份验证令牌中的用户电子邮件 属性 的文档。
所以要删除唯一允许删除的文档:
import { getAuth } from "firebase/auth";
const auth = getAuth();
const user = auth.currentUser;
const myEmailAddress = user.email;
...
const myCollectionCol = collection(db, 'myCollection');
deleteDoc(doc(myCollectionCol, myEmailAddress));
如果您希望用户能够删除 email
有其电子邮件地址的所有文档,那就是:
match /myCollection/{doc} {
allow delete : if request.auth != null &&
request.auth.token.email == resource.data.email;
// the email field in the doc
}
我的 'myCollection' 文档中有一个标记为 'email' 的字段,我正在尝试编写一个 firestore 规则以允许在登录用户的电子邮件记录与记录。我将我的规则编码如下:
match /myCollection/{email} {
allow delete : if request.auth != null && request.auth.token.email == email;
}
这不允许删除匹配的记录。建议将不胜感激,因为虽然这个问题在 Whosebug 上被问了很多次,但我看到的答案是矛盾的,其中 none 对我有用。
我正在“游乐场”中对此进行测试,如果我将 'location' 设置为 myCollection/{documents = **},规则将失败。请参阅下面的屏幕截图:
我程序中的删除代码为:
const myCollectionCol = collection(db, 'myCollection');
const myCollectionQuery = query(myCollectionCol, where("email", "==", email));
const myCollectionSnapshot = await getDocs(myCollectionQuery);
myCollectionSnapshot.forEach((doc) => {
deleteDoc(doc.ref);
});
您正在触发一个查询 returns 所有具有字段 email
且值等于 email 变量的文档:
query(myCollectionCol, where("email", "==", email))
但是您的规则只允许删除其*文档 ID 等于其身份验证令牌中的用户电子邮件 属性 的文档。
所以要删除唯一允许删除的文档:
import { getAuth } from "firebase/auth";
const auth = getAuth();
const user = auth.currentUser;
const myEmailAddress = user.email;
...
const myCollectionCol = collection(db, 'myCollection');
deleteDoc(doc(myCollectionCol, myEmailAddress));
如果您希望用户能够删除 email
有其电子邮件地址的所有文档,那就是:
match /myCollection/{doc} {
allow delete : if request.auth != null &&
request.auth.token.email == resource.data.email;
// the email field in the doc
}