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

时间:2018-02-03 18:54:02

标签: java android firebase firebase-realtime-database firebase-authentication

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

在提出这个问题之前我搜索了答案,但我见过的那些都没有帮助我解决这个问题。

我正在使用Google进行身份验证,我将电子邮件存储在Firebase中“Authenticated-Users”

这也给我带来了第二个问题:当我退出然后使用同一个用户重新登录时,电子邮件ID会重复并添加到Firebase试。

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

这是我的数据库;如您所见,同一用户被添加两次: enter image description here

1 个答案:

答案 0 :(得分:1)

  

我希望Firebase接受,只有当emailId未被使用或Firebase数据库中不存在时才会接受。

当您使用Firebase提供的任何方法(电子邮件,Google ..)进行身份验证时,用户注册后,该电子邮件将位于Firebase控制台中。因此,如果电子邮件位于控制台中,那么如果其他用户尝试使用该电子邮件进行注册,则他们无法通过已验证的控制台进行注册。

这是通过Firebase身份验证完成的(因此您不必这样做)。

您可以在注册时使用此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) {

        }
    });