【问题标题】:Can we have Email Id as key in Firebase database? [duplicate]我们可以将电子邮件 ID 作为 Firebase 数据库中的键吗? [复制]
【发布时间】:2017-06-02 10:55:07
【问题描述】:

我想创建一个登录系统,当用户登录时,基于 在登录的用户电子邮件 ID 上,我想检索 EID。

我想要的JSON结构是:

{
  "joel@dept.com":
       {
            "EID":"0153"
        },
   "Stan@dept.com":
       {
               "EID":"0163"
        }
}

我尝试将具有上述结构的 JSON 文件导入 Firebase 项目数据库,但收到错误提示“./ ...”不能成为密钥的一部分。

【问题讨论】:

  • "ECMAScript 可以像 foo['bar'] 和 foo.bar 一样使用"你能解释一下吗
  • firebase 中的键将成为 url 的一部分,因此必须应用对 url 的验证
  • this answer 中列出了无效的键字符(其中. 是一个)。
  • 如果您创建自己的密钥,它们必须是 UTF-8 编码的,最多可以是 768 字节,并且不能包含 .、$、#、[、]、/ 或 ASCII 控制字符0-31 或 127。link
  • Joel:您不能在 Firebase 数据库密钥中使用 .,因此通常将其编码为 ,(这在电子邮件地址中很容易出现)。 @Dai:var object = { "bla@doo.com": "value" } 有效。您不能在其上使用点符号这一事实并不会使其无效。

标签: json firebase firebase-realtime-database


【解决方案1】:

用另一个字符替换一个字符可能会导致混淆,并可能在未来引起严重问题。

例如,将. 替换为_DOT_ 现在可能有效。假设将来您想取回原始电子邮件以进行验证; [没什么大不了的] 我可以将 _DOT_ 替换为 .。如果有人有电子邮件 actual._DOT_@actualdot.com,则此操作失败

解决方案是使用电子邮件哈希。我目前更喜欢 md5。

所以结构应该是:

{
    "<md5 hash of 'joel@dept.com'>": { 
            "EID":"0153" 
     }, 
    "<md5 hash of 'Stan@dept.com'>": { 
             "EID":"0163" 
    }
 }

【讨论】:

  • 应该标记为答案。
  • 你能指导我如何在firebase项目中使用md5时刻吗?
【解决方案2】:

我遇到了同样的限制,我替换了 '.'使用 '__dot__' 将电子邮件 ID 作为键。

【讨论】:

  • 我继续使用 firebase 密钥本身并更改了代码
  • 你无法知道h__dot__x@gmail__dot__com是代表h.x@gmail.com还是h__dot__x@gmail.com
【解决方案3】:

Firebase 不支持 .[]{} 之类的字符,因此如果您想使用电子邮件作为主键生成,则必须替换 .replace(".",",")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 2011-06-05
    • 1970-01-01
    相关资源
    最近更新 更多