我正在使用 firestore 模拟器,当文档存在时,exists 不会阻止调用。
match /usernames/{username} {
allow update: if false;
allow create: if isUsernameAvailable(request.resource.data.username);
function isUsernameAvailable(rawName) {
let name = rawName.lower();
return isValidMessage() &&
isValidUsername(name) &&
!exists(/databases/$(database)/documents/users/$(request.auth.uid));
}
这是已接受的请求:
和现有文件:
该文件显然存在。我已将我的代码与类似代码进行了比较,并且没有看到语法错误,所以我不知所措。
第二张截图右下角的文档标题以斜体显示,这意味着该文档实际上并不存在。 ID 仅显示在 Firestore 控制台中,因为您的子集合中包含数据。
由于该文档实际上并不存在,因此在该路径上调用
exist
会正确返回 false。