在Firebase实时数据库上使用电子邮件地址作为主键/ uid是否可靠?

时间:2019-03-29 18:22:20

标签: firebase firebase-realtime-database google-apps-script

Firebase实时数据库具有防止这些字符的字符集限制

. (period)
$ (dollar sign)
[ (left square bracket)
] (right square bracket)
# (hash or pound sign)
/ (forward slash)

出现在主键中。

但是此library for firebase real-time database on google apps script使用转义的电子邮件作为 auth.uid

因此,我将FB实时数据库的结构构造为如下:

{  
   users={  
      auth.uid={  //auth.uid == escaped email
         phone_no=+123456789012,
         email=foo@bar.com
      },
      ... //rest of the array
   }
}

我担心的是,两个不同的用户可能拥有相同的转义电子邮件。

例如:

  

User1电子邮件:johndoe@foobar.com

     

User1逃脱了电子邮件:johndoefoobarcom

     

User2电子邮件:j.o.h.ndo.e@foobar.com

     

User2转义了电子邮件:johndoefoobarcom

电子邮件服务(尤其是Gmail)是否允许用户注册与上图相似的电子邮件?

这就是我的规则

{
  "rules": {
    "users": {
      "$user_id": {
        ".write": "$user_id === auth.uid",
        ".read": "$user_id === auth.uid"
      }
    }
  }
}

因此,您可以看到为什么我使用转义的电子邮件(auth.uid)作为根密钥(因为auth.uid已经是转义的电子邮件地址)

这是Apps脚本代码-> https://codepen.io/edge-developer/pen/JVPNOY

1 个答案:

答案 0 :(得分:3)

您使用的Firebase版本非常旧,您需要升级到Firebase js 5.8.5

另外,不,最好使用在验证特定用户时获得的userId。使用uid的主要原因是因为uid对于每个用户都是唯一的。

在这里检查:

Why use UID in Firebase? Should I use it