android - 规则条目重复 firebase 不工作

标签 android firebase firebase-realtime-database firebase-security

我在 android 中有一个注册卖家的应用程序,它有一个唯一的电子邮件,我将它们存储在 firebase 中。创建一个规则以不允许添加重复项,但它似乎不起作用。我做错了什么?

{
 "rules": {
   ".read": true,
   ".write": true,
   "sellers": {
     "$seller": {
       "email": {
         ".write": "!data.exists()"
       }
     }
   }
 }
}

我的添加方法

 public void addSeller(Seller seller){
    HashMap<String,Seller> map= new HashMap<>() ;
    String email = seller.getEmail().replace(".",",");
    map.put(email,seler);
    database.child("sellers").setValue(map);
}

最佳答案

您正在调用 push(),它会生成一个统计上保证唯一的新 child 。

如果您想确保唯一的电子邮件地址,您将必须保留一个集合,其中(编码的)电子邮件地址是关键:

emails
  pete@somedomain,com
  puf@somedomain,com

使用此结构,以下规则将起作用以确保电子邮件地址只能写入一次:

{
 "rules": {
   ".read": true,
   "emails": {
     "$email": {
       ".write": "!data.exists()"
     }
   }
 }
}

唯一值这个话题经常出现,所以我建议你也看看这些:

关于android - 规则条目重复 firebase 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44203936/

相关文章:

java - 在 RecyclerView 中扩展项目时使用 TransitionManager 和 ChangeBounds 与layout_height : match_constraint 结合使用会产生奇怪的视觉效果

ios - 如何将字符串转换为 CLLocationDegrees Swift 2

javascript - onCreate 触发firebase云函数

firebase - 我们如何将 Firebase 托管与 Firebase 实时数据库/存储集成?

node.js - nodejs firebase 错误 RangeError : Maximum call stack size exceeded failure

javascript - 为什么我无法将此代码部署到 firebase 函数?我不明白这个错误

java - 即使在更新模型成功后更新 RecyclerView 也失败

java - 为什么当我调用 notifyDataSetChanged() 时我的 ListView 没有更新?

android - 尝试删除 Android Firebase 中的项目时出现空指针异常

java - 如何为 Android 游戏保存数据并访问数据?