我正在玩Firebase的新Firestore数据库,并想知道是否有更有效的方法来强制执行唯一的用户名(或唯一的子节点)。
我使用电子邮件/密码验证,但允许用户创建一个独特的句柄,如Twitter。
使用Realtime数据库,我可以通过事务和多节点结构实现这一目标。
-users
-uid1234:
-username: ryan
-usernames:
-ryan: uid1234
我认为可以在没有额外usernames
节点的情况下使用文档作为Firestore中的用户名来执行此操作。
答案 0 :(得分:0)
您可能可以用两种方法来做到这一点。创建用户之前,请先与另一个呼叫联系,以确认该用户是否存在于具有用户名的集合中。
您还可以创建类似以下规则:
match /users/{document=**} {
allow create: if !exists(/databases/$(database)/documents/usernames/$(request.resource.data.username));
}
在这种情况下,如果用户名在创建时已经存在并且您可以捕获代码,则会返回一个错误。