gpt4 book ai didi

firebase - 您如何调试 Firestore 安全规则?

转载 作者:行者123 更新时间:2023-12-03 14:40:54 26 4
gpt4 key购买 nike

我哭着睡在这个上面。

我的 getAfter正在返回一个只有 1 个字段的对象,因为其他所有字段类型都不正确。我不知道如何在没有任何调试工具的情况下进行检查(我看不到数据,所以都是猜测和检查)。

这是我的规则的淡化版本 users .

match /users/{userId} {
function isValidUser(user) {
return user.id is string &&
(user.address is string || user.address == null) &&
(user.dateOfBirth is number || user.dateOfBirth == null) &&
user.email is string &&
user.name is string &&
(user.phoneNumber is string || user.phoneNumber == null);
}

function isValidWrite(userId, user) {
return signedIn() &&
writeHasMatchingId(userId, user) &&
isValidUser(user);
}

allow read: if signedIn();
allow create: if signedInAndWriteHasMatchingId(userId) &&
userHasId(userId) &&
isValidUser(request.resource.data); // Tested
allow update: if isValidWrite(
userId,
getAfter(/databases/$(database)/documents/users/$(userId))
);
}

这是我试图运行的事务。
const user1Ref = this.userCollection.doc(user1Id);
const user2Ref = this.userCollection.doc(user2Id);
const batchWrite = this.store.batch();

batchWrite.update(user1Ref, {
"details.friend": user2Id,
});
batchWrite.update(user2Ref, {
"details.wishlist": true,
});

batchWrite.commit();

如果我注释掉 isValidUser(user)行,操作成功。如果我在 function isValidUser(user) 中没有注释掉任何行除了 user.id is string , 它失败。

为什么会出现 getAfter文档只有 id Firebase 控制台中列出的字段,而没有其他字段?有没有办法输出或调试 getAfter的值?所以我可以看到它到底是什么?

最佳答案

我仅根据您的问题中的一行来回答:

Is there a way to output or debug the value of getAfter so I can see what it even is?



至少在 2020 年是这样。

当一个人在规则操场(规则模拟器,见左下角)中运行某些东西时,规则评估中采取的步骤如下所示:

enter image description here

此列表有时会提供一些指示,以帮助确定规则评估器正在做什么。需要单独“单击”打开的步骤,而不是仅通过瞥一眼就可以看到真/假,这有点乏味。但总比没有好。

注意:我认为 Firebase 正在开发此功能。它有时似乎提供了错误的信息 - 或者我没有正确阅读它。但它可能会有所帮助,并且看起来是向开发人员提供此类信息的好地方。我们真的很想看到:对于当前数据、构建的查询文档和规则,Firebase 是如何看待它的,为什么规则评估为 true 或 false?

关于firebase - 您如何调试 Firestore 安全规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52850948/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com