Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 限制Firebase数据库在Android上仅接受唯一的电子邮件ID_Java_Android_Firebase_Firebase Realtime Database_Firebase Authentication - Fatal编程技术网

Java 限制Firebase数据库在Android上仅接受唯一的电子邮件ID

Java 限制Firebase数据库在Android上仅接受唯一的电子邮件ID,java,android,firebase,firebase-realtime-database,firebase-authentication,Java,Android,Firebase,Firebase Realtime Database,Firebase Authentication,我有一个经过身份验证的用户列表,我希望Firebase仅在该电子邮件ID未被使用或在我的Firebase数据库中不存在时才接受该电子邮件ID 在问这个问题之前,我一直在寻找答案,但我所看到的答案都没有帮助我解决这个问题 我使用谷歌进行身份验证,我将电子邮件存储在Firebase上的经过身份验证的用户中 这也给我带来了第二个问题:当我注销并再次与同一用户登录时,电子邮件ID会被复制并再次添加到Firebase中 以下是我已应用但不起作用的规则: 这是我的数据库;如您所见,同一用户添加了两次:

我有一个经过身份验证的用户列表,我希望Firebase仅在该电子邮件ID未被使用或在我的Firebase数据库中不存在时才接受该电子邮件ID

在问这个问题之前,我一直在寻找答案,但我所看到的答案都没有帮助我解决这个问题

我使用谷歌进行身份验证,我将电子邮件存储在Firebase上的经过身份验证的用户中

这也给我带来了第二个问题:当我注销并再次与同一用户登录时,电子邮件ID会被复制并再次添加到Firebase中

以下是我已应用但不起作用的规则:

这是我的数据库;如您所见,同一用户添加了两次:

我希望Firebase接受,但前提是该电子邮件ID未被使用或不存在于Firebase数据库中

当您使用任何方法进行身份验证电子邮件时,谷歌。。由Firebase提供,用户注册后,电子邮件将在Firebase控制台中。因此,如果电子邮件在控制台中,那么如果另一个用户试图使用该电子邮件注册,则无法注册,因为它存在于经过身份验证的控制台中

这是由Firebase Authentication完成的,因此您不必这样做

您可以在注册时使用以下Toast来测试这一点:

Toast.makeText(LoginActivity.this, "User Authentication Failed: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
它将向您显示电子邮件存在的错误示例

要检查数据库中是否存在该电子邮件,请执行以下操作:

   DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Authenticated-Users");

    ref.orderByChild("email").equalTo(anemailhere).addListenerForSingleValueEvent(new ValueEventListener() {

       @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists()){

           }
          }
     @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });

非常感谢你在这里帮助我,这个解决方案对我很有效。上帝保佑你。您好,这个解决方案似乎不再适用于我了,它曾经工作过好几次,但现在不起作用了。我没有收到任何错误或任何应用程序崩溃,我甚至没有对代码进行任何更改。你对这个问题有其他答案吗?哪一个答案,因为它是两个部分?也只需将控制台中的规则保持为auth=读取和写入都为null。不要加!当firebase检查电子邮件是否在控制台中时,newData.childemail.exists存在。我不修改任何内容,这种解决方案对我来说已经停止工作。