如何检查Firebase身份验证中是否已存在电话号码?

时间:2018-10-06 07:40:53

标签: android firebase firebase-authentication

我已在我的android应用中使用带电话号码的Firebase身份验证。但是,firebase不会像电子邮件密码身份验证那样提供不同的登录和注册功能。如何检查用户是否已经存在?

1 个答案:

答案 0 :(得分:1)

在这种情况下,您可以做的是将每个注册用户的电话号码存储在Firebase数据库的phone节点中。

然后,当通过电话号码对新用户进行签名时,您可以在电话节点中运行一次检查,检查电话号码是否存在。

要将电话号码存储在数据库中名为phone的节点中,可以使用如下代码:

private void signInWithPhoneAuthCredential(PhoneAuthCredential credential){
        mAuth.signInWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if(task.isSuccessful()){
                   // you may be using a signIn with phone number like this, now here you can save the phone number in your database
                 DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("phone");

                 ref.child(phoneNumber).setValue(phoneNumber);

                }
                else if(task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
                        Toast.makeText(MainActivity.this, "OTP is incorrect", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

在上面的代码中,phoneNumber是您要注册的用户编号。另外,我使用了相同的标题名称和值,即phoneNumber本身。您可以使用名称或其他任何名称。

现在,当您注册新用户时,应该使用以下代码在数据库中的phone节点中运行检查。您可以在上面的代码中将实例添加到此新方法中。

boolean checkForPhoneNumber(String number){
  DatabaseReference ref = FirebaseDatabase.getInstance().getReference();

  ref.orderByChild("phone").equalTo(number).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        if(dataSnapshot.exists())
                          return true;
                        else
                          return false;
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });

}