Col*_*gic 5 firebase google-cloud-firestore firebase-security-rules
我在哭自己要睡这个。
我getAfter
返回的对象只有一个字段,因为其他所有字段类型都不正确。我不知道如何在没有任何调试工具的情况下进行检查(我看不到数据,因此只能进行猜测和检查)。
这是我的规则的精简版本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))
);
}
Run Code Online (Sandbox Code Playgroud)
这是我要运行的事务。
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();
Run Code Online (Sandbox Code Playgroud)
如果我注释掉该isValidUser(user)
行,则操作成功。如果我在function isValidUser(user)
except中user.id is string
未注释任何行,它将失败。
当Firebase控制台中列出getAfter
文档时,为什么文档只包含该id
字段,而没有其他字段?有没有一种方法可以输出或调试的值,getAfter
这样我什至可以看到它的含义?
我仅根据您的问题中的一行来回答:
有没有办法输出或调试 getAfter 的值,以便我可以看到它到底是什么?
至少在 2020 年是这样。
当一个人在规则操场(规则模拟器,见左下角)中运行某些东西时,规则评估中采取的步骤如下所示:
此列表有时会提供一些指示,以帮助确定规则评估器正在做什么。需要单独“单击”打开的步骤,而不是仅通过瞥一眼就可以看到真/假,这有点乏味。但总比没有好。
注意:我认为 Firebase 正在开发此功能。它有时似乎提供了错误的信息 - 或者我没有正确阅读它。但它可能会有所帮助,并且看起来是向开发人员提供此类信息的好地方。我们真的很想看到:对于当前数据、构建的查询文档和规则,Firebase 是如何看待它的,为什么规则评估为 true 或 false?
归档时间: |
|
查看次数: |
847 次 |
最近记录: |