Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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
Android Firebase-如何检查用户是否已使用电话号码注册_Android_Firebase_Firebase Authentication - Fatal编程技术网

Android Firebase-如何检查用户是否已使用电话号码注册

Android Firebase-如何检查用户是否已使用电话号码注册,android,firebase,firebase-authentication,Android,Firebase,Firebase Authentication,我正在使用firebase电话验证。当用户使用电话号码创建帐户时,下次他使用相同的电话号码创建帐户时 然后我想显示一条消息,说明解决方案的帐户已存在 注册后,请在数据库中输入一些条目,以确定用户的身份,以便下次您可以确定已注册的用户 在OTP验证后,签入实时数据库,手机号码已经存在,否则它就已经输入了特定的手机号码。我已经在我的项目中完成了这项工作,它工作得很好,你可以使用它,你可以使用你的手机号码而不是“deviceId” 为了检测该电话号码是否已用于帐户注册,您不能仅依赖默认身份验证表。但还

我正在使用firebase电话验证。当用户使用电话号码创建帐户时,下次他使用相同的电话号码创建帐户时 然后我想显示一条消息,说明解决方案的帐户已存在

注册后,请在数据库中输入一些条目,以确定用户的身份,以便下次您可以确定已注册的用户


在OTP验证后,签入实时数据库,手机号码已经存在,否则它就已经输入了特定的手机号码。

我已经在我的项目中完成了这项工作,它工作得很好,你可以使用它,你可以使用你的手机号码而不是“deviceId”


为了检测该电话号码是否已用于帐户注册,您不能仅依赖默认身份验证表。但还必须使用Firebase数据库创建虚拟用户表以进行检查

例如,您可以创建一个json树,将实时数据库中的用户数据保存为以下结构:

您的代码应该类似于:

在成功登录/用户注册的代码上:


我是这样处理的。Firebase在身份验证和其他无效事件发生时抛出一些异常,我们只需处理它们并通知用户

示例代码:

    private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "signInWithCredential:success");
                        //do something on success
                    } else {
                        //handle the error here
                        showInfoToUser(task)
                        }
                    }
                }
            });
}
使用PhoneAuthCredential(PhoneAuthCredential凭据)的私有无效登录{
mAuth.SIGNWITH凭证(凭证)
.addOnCompleteListener(这是新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Log.d(标记“signInWithCredential:success”);
//为成功做点什么
}否则{
//在这里处理错误
showInfoToUser(任务)
}
}
}
});
}
通过检查这里的异常来检查我们得到了什么样的错误

 private void showInfoToUser(Task<AuthResult> task) {
    //here manage the exceptions and show relevant information to user
    hideProgressDialog();
    if (task.getException() instanceof FirebaseAuthUserCollisionException) {
        showSnackBar(getString(R.string.user_already_exist_msg));
    } else if (task.getException() instanceof FirebaseAuthWeakPasswordException) {
        showSnackBar(task.getException().getMessage());
    } else if (task.getException() instanceOf FirebaseAuthInvalidCredentialsException){
        //invalid phone /otp
        showSnackBar(task.getException().getMessage());
    }
    else {
        showSnackBar(getString(R.string.error_common));
    }
}
private void showInfoToUser(任务){
//这里管理异常并向用户显示相关信息
hideProgressDialog();
if(FirebaseAuthUserCollisionException的task.getException()实例){
showSnackBar(getString(R.string.user_已存在_msg));
}else if(FirebaseAuthWeakPasswordException的task.getException()实例){
showSnackBar(task.getException().getMessage());
}else if(FirebaseAuthInvalidCredentialsException的task.getException()实例){
//无效电话/otp
showSnackBar(task.getException().getMessage());
}
否则{
showSnackBar(getString(R.string.error_common));
}
}

onTask
结果检查
FirebaseAuthUserCollisionException

if (task.getException() instanceof FirebaseAuthUserCollisionException) {
    Toast.makeText(Signup.this, "User already exist.",  Toast.LENGTH_SHORT).show();
}
DatabaseReference userRef=FirebaseDatabase.getInstance().getReference(“用户”);
用户参考
.orderByChild(“电话号码”)
.equalTo(mMobile.getText().toString())
.addListenerForSingleValueEvent(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
if(dataSnapshot.getValue()!=null){
//这意味着用户已经注册
//添加代码以显示提示
OpenErrorArlRT(“已注册的手机号码”);
}否则{
Intent Intent=newintent(getApplicationContext(),OTPVerifyActivity.class);
intent.putExtra(“phonenumber”,mMobile.getText().toString());
星触觉(意向);
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});

这是检查用户是否已向firebase注册的非常简单的方法

 AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithCredential:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        if(task.getResult().getAdditionalUserInfo().isNewUser()){
                            register(user);
                        }else{
                            Intent intent = new Intent(LoginActivity.this,MainActivity.class);
                            startActivity(intent);
                        }
                        Toast.makeText(LoginActivity.this, "welcome"+user.getDisplayName(), Toast.LENGTH_SHORT).show();
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        Toast.makeText(LoginActivity.this, "signin Failed", Toast.LENGTH_SHORT).show();
                    }

                    // ...
                }
            });
AuthCredential credential=GoogleAuthProvider.getCredential(acct.getIdToken(),null);
mAuth.SIGNWITH凭证(凭证)
.addOnCompleteListener(这是新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
//登录成功,使用登录用户的信息更新UI
Log.d(标记“signInWithCredential:success”);
FirebaseUser=mAuth.getCurrentUser();
if(task.getResult().getAdditionalUserInfo().isNewUser()){
注册(用户);
}否则{
意向意向=新意向(LoginActivity.this,MainActivity.class);
星触觉(意向);
}
Toast.makeText(LoginActivity.this,“welcome”+user.getDisplayName(),Toast.LENGTH\u SHORT.show();
}否则{
//如果登录失败,则向用户显示消息。
w(标记“signInWithCredential:failure”,task.getException());
Toast.makeText(LoginActivity.this,“登录失败”,Toast.LENGTH_SHORT.show();
}
// ...
}
});

这不适用于电话身份验证。这只适用于与电子邮件身份验证相关的问题:@MuhammadbinYusrat我已经检查过了。对于电话,您可以重新登录,无需任何问题,但这不是这里的问题。
if (task.getException() instanceof FirebaseAuthUserCollisionException) {
    Toast.makeText(Signup.this, "User already exist.",  Toast.LENGTH_SHORT).show();
}
 AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithCredential:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        if(task.getResult().getAdditionalUserInfo().isNewUser()){
                            register(user);
                        }else{
                            Intent intent = new Intent(LoginActivity.this,MainActivity.class);
                            startActivity(intent);
                        }
                        Toast.makeText(LoginActivity.this, "welcome"+user.getDisplayName(), Toast.LENGTH_SHORT).show();
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        Toast.makeText(LoginActivity.this, "signin Failed", Toast.LENGTH_SHORT).show();
                    }

                    // ...
                }
            });