【问题标题】:Is it reliable to use email address as primary key/uid on Firebase Realtime Database?使用电子邮件地址作为 Firebase 实时数据库的主键/uid 是否可靠?
【发布时间】:2019-03-29 18:22:20
【问题描述】:

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
   }
}

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

例如:

用户 1 电子邮件:johndoe@foobar.com

User1 转义电子邮件:johndoefoobarcom

用户 2 电子邮件: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)作为 rootkey(因为 auth.uid 已经是转义的电子邮件地址)

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

【问题讨论】:

  • 在您链接到的那个页面中 - 它没有说明使用电子邮件地址作为唯一 ID。您应该使用 Firebase 身份验证分配给用户的唯一 ID。这是标准的做法。 (此外,该页面指的是非常旧的 Firebase 版本。我不确定它是否会给您提供现代建议。)
  • 我的谷歌电子邮件中有几个句点 (.),所以是的。哈希、句点和美元符号在电子邮件地址中都是合法的。
  • @DougStevenson 我已经测试了代码,这就是它使用的(转义的电子邮件地址)。有任何您可能希望我试用的 Firebase 身份验证/实时数据库库吗?
  • 为什么-哦-为什么要使用用户可以随意更改的东西作为他们的主键?电子邮件地址、电话号码和姓名是可怕的 ID。
  • 我知道,但这就是图书馆使用的。这超出了我的范围

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


【解决方案1】:

您使用的firebase版本很旧,需要升级到firebase js 5.8.5

另外,如果您对特定用户进行身份验证,最好使用您获得的 userId。使用 uid 的主要原因是因为它对每个用户都是唯一的。

在这里查看:

Why use UID in Firebase? Should I use it

【讨论】:

猜你喜欢
  • 2011-04-17
  • 1970-01-01
  • 2020-08-12
  • 2017-12-28
  • 2012-01-28
  • 1970-01-01
  • 2020-06-08
  • 2013-12-08
  • 1970-01-01
相关资源
最近更新 更多