我已在我的android应用中使用带电话号码的Firebase身份验证。但是,firebase不会像电子邮件密码身份验证那样提供不同的登录和注册功能。如何检查用户是否已经存在?
答案 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) {
}
});
}