【发布时间】:2018-04-03 23:06:23
【问题描述】:
我想要实现的目标非常简单。只有当它不存在时,我才需要在数据库中创建一个用户条目。
应用流程:
- 使用 Firebase Auth 创建用户(获取 UID)
- 使用 UID 作为键在数据库中创建用户文档
客户端代码(创建操作):
this.db.doc('users/' + uid).set({username: Santa})
firestore 规则:
service cloud.firestore {
match /databases/{database}/documents {
match /users/{uid} {
allow create: if
request.auth != null &&
request.auth.uid == uid &&
!exists(/databases/$(database)/documents/users/$(uid));
allow update: if request.auth != null && request.auth.uid == uid;
}
}
}
其他信息:
您可能已经知道代码不起作用。每次我运行客户端代码时,当前用户都会被一个新文档完全替换。但是,如果我从规则中删除以下行,一切都会按预期工作:
allow update: if request.auth != null && request.auth.uid == uid;
但现在问题出现了,如何保护用户文档中的数据免受未经授权的修改?有什么建议吗?
【问题讨论】:
-
我会考虑为此使用 firebase 函数 - 而不是客户端修改用户集合。有一个“auth”触发器,可让您在创建新用户时执行 stuf。