0

我正在使用 Firebase 简单登录的电子邮件/密码身份验证选项。
我将用户的数据与转义的电子邮件一起存储为键,其中“。” 字符已替换为“,”(因为 Firebase 不允许将“。”存储在键中),而不是使用用户 ID 作为键。问题是,在安全规则中,我不能使用正则表达式针对 auth.email 变量对转义的电子邮件进行身份验证。所以我不能做以下事情:

users: {
  $user: {
    ".read":  "auth.email == $user",
    ".write": "auth.email == $user"
  }
}

因为每个 $user 看起来像 'some,one@domain,co,uk' 而 auth.email 是 'some.one@domain.co.uk'。
有没有办法解决这个问题?我是否需要将用户 ID 存储在每个 $user 中以使用户身份验证成为可能?在这种情况下,我想将用户数据简单地存储在基于 id 的节点中而不是转义的电子邮件中会更容易。

4

1 回答 1

2

更新:

如果您使用 Firebase 简单登录电子邮件/密码身份验证,建议您根据该uid字段为用户设置密钥,该字段不会更改并且在您的 Firebase 的所有用户中是唯一的,无论他们是通过电子邮件/密码、Facebook、谷歌等

以前版本的 Firebase 身份验证(即Firebase 简单登录)将电子邮件地址放在安全规则auth变量中,但由于 (1) 并非所有用户都有电子邮件地址,(2) 用户可能有多个电子邮件地址,以及 (3 ) 电子邮件地址可以更改。因此,它们不适合 Firebase 中的索引。


原答案:

但是,如果您更愿意根据电子邮件地址键入数据,则可以使用安全规则中的.replace()方法直接在安全规则中用逗号替换句点。例如:

".read": "root.child('users').child(auth.email.replace('.', ',')).exists()"

有关更多详细信息,请参阅https://www.firebase.com/docs/security/string/replace.html

于 2013-10-14T01:21:35.857 回答