如何根据数据库用户 id(不是 uid)设置 firebase 规则

Posted

技术标签:

【中文标题】如何根据数据库用户 id(不是 uid)设置 firebase 规则【英文标题】:How to set firebase rules based on database user id (not uid) 【发布时间】:2015-08-26 07:00:26 【问题描述】:

您好,我的 fb 数据库中有一个用户列表。成功注册后会自动生成用户 ID,每个用户条目都有姓名、电子邮件和 uid。此外,这些属性中的每一个都在 /index 中建立索引,以便我可以根据用户的 uid 轻松查找用户的 id。

根据文档,firebase 说要使用 write: $user_id === auth.uid

如何使用生成的 ID 而不是 uid 完成此操作?

这里是 Facebook 数据库:https://medviz.firebaseio.com/

【问题讨论】:

【参考方案1】:

在你的用户对象中会有这样的用户

users : 
 user1234abc:         
       name: "abc"         
    ,                    
    user2434dbcc:         
       name: "abc"         
     
   

用户对象中有很多unique key/user nodes,例如user1234abcuser2434dbcc

该唯一键可以在规则中命名为任何variable,无需将其命名为$user_id,您可以将其命名为任何您想要的名称,例如您可以将变量命名为$any_variable,以获得唯一的用户键

每当用户成功验证相同的唯一 ID 时,在 auth.id 中 auth.uid 所以当你编辑与该用户相关的信息时,你可以在 auth.uid 的任何地方进行数学运算

例如,如果auth.uid 包含user1234abc 并且如果user1234abc 正在编辑此对象user1234abc:name: "abc" 则根据.write 规则,他将能够

查看下面的更新视图

更新的视觉层次结构:

--schema--
users : 
           ________________
          |
    user1234abc:          |
       name: "abc"         |  
    ,                     |
    user2434dbcc:         |
       name: "abc"         |
                          |
                  key can be name as any variable  in rules
                           |
-- rules--
                           | 
                          | 
  "rules":                |
    "users":              |
      ".read": true,       |
           ________________|___________  
          |                            |
         \|/                           | 
      "$any_variable":               \|/     
        ".write": "$any_variable === auth.uid"
      
    
  
                      

【讨论】:

@FrankvanPuffelen 这只是一个例子,我知道它有些可疑;) @FrankvanPuffelen 如果是关于箭头的,你就去吧:P ***.com/questions/27637609/… 我试图称赞您使用图表来解释技术概念。对不起,如果我觉得我很刻薄。 @FrankvanPuffelen 是的,我明白了,不过有点晚了 ;) 谢谢 :) 谢谢,@A.B 请纠正我,但 auth.uid 会是 Firebase 为新用户生成的内容吗?如果是这样,我将如何让我的唯一用户的表 ID(ala,-Jdfsdj34h3kjasfh)成为允许的权限?

以上是关于如何根据数据库用户 id(不是 uid)设置 firebase 规则的主要内容,如果未能解决你的问题,请参考以下文章

Linux: uid/euid/suid的关系

shell清除日志小脚本

架构-水平切分架构之基因法

对于与用户 uid 相同的文档 ID,如何从 Firestore 中仅检索一个用户的数据?

仅当 UID 与 Firebase Firestore 中的集合名称匹配时,如何读取集合?

如何检查 Flutter Firestore 中是不是存在用户文档?