【问题标题】:RealTime firebase set rules to check prevent duplicates [duplicate]实时 Firebase 设置规则以检查防止重复 [重复]
【发布时间】:2022-01-10 13:14:15
【问题描述】:

我正在尝试通过电子邮件检查我的数据库中是否存在用户,是否有任何 Firebase 规则可以做到这一点? 我的用户:

public class User {
    private String email;
    private String password;
    private boolean hasRightToDrive;
}

有了这个 firebase 规则,我无法添加用户:

{
  "rules": {
    ".read": "now < 1640815200000",  // 2021-12-30
    ".write": "!data.exists()",  // 2021-12-30
  }
}

有了这个,我仍然可以使用相同的邮件添加多个用户

{
  "rules": {
    ".read": "now < 1640815200000",  // 2021-12-30
    ".write": "data.exists()",  // 2021-12-30
  }
}

【问题讨论】:

  • 登录过程已经有,会抛出email已经存在的错误。
  • Firebase: Error (auth/email-already-in-use). 如果你抓住它就会得到这个错误,否则它会抛出一个控制台日志。
  • 如果您不是指登录您的应用程序的用户,而是向您发送电子邮件的用户。最好的方法是在您进行电子邮件检查时创建firebase功能,它是否全部存在于数据库中,如果是则抛出错误。
  • Firebase 安全规则无法检查父节点下是否存在特定值,因为这要求它们查询所有这些节点并且不会扩展。解决方案是添加一个额外的路径,您可以在其中使用(编码的)电子邮件地址作为子节点的 key。由于键在其父项中按定义是唯一的,因此您无法以任何方式插入重复项。有关这方面的更多信息,请参阅关于我链接的主题的上一个问题。

标签: firebase firebase-realtime-database firebase-security


【解决方案1】:

如果存在邮箱 allredy 的用户,使用 firebase 登录过程会抛出错误:Firebase: Error (auth/email-already-in-use).

如果您不是指未登录您的应用程序的用户,而是仅向您发送电子邮件的用户。 最好的方法是创建 firebase 功能,您可以在其中进行电子邮件检查,它是否全部存在于数据库中,如果是则抛出错误。

使用规则,您可以设置一个等于用户电子邮件的 id 并在规则函数 exists() 中使用,但不要认为您可以设置一个文档 ID 巫婆“@”和“。”字符。因此,您需要使用用户电子邮件地址进行哈希并将哈希设置为 id。电子邮件总是小写,因此您可以将 id 设置为:example@gmail.comexampleAgmailOcom 其中 A = @ 和 O = 。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2016-09-28
    • 2016-08-17
    • 1970-01-01
    • 2020-07-10
    • 2017-09-09
    • 2018-06-29
    相关资源
    最近更新 更多