【发布时间】: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