首页 > 解决方案 > 如何将电话身份验证与电子邮件身份验证 firebase android 联系起来

问题描述

我正在创建应用程序,用户必须验证他的电话号码,并且必须使用他的电子邮件和密码以及其他文件(如 dob 和所有文件)进行注册。第一个用户将验证电话号码,所以我使用了电话号码无身份验证,一旦完成,用户将导航到电子邮件和密码注册。所以这里用户将使用电子邮件身份验证进行注册。它创建了两个用户标识。所以我想在一个用户ID下进行两种身份验证。

PhoneAuthentication.java

private void signInWithCredential(PhoneAuthCredential credential) {
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(new OnCompleteListener<AuthResult>() {


                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {

                        Toast.makeText(GetOTPActivity.this, "Mobile no authentication is successfully !!!", Toast.LENGTH_SHORT).show();
                        Intent intent;
                        intent = new Intent(GetOTPActivity.this, Register.class);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

                        startActivity(intent);

                    } else {
                        Toast.makeText(GetOTPActivity.this, task.getException().getMessage(),
                                Toast.LENGTH_LONG).show();
                    }
                }

            });
}

电子邮件认证.java

    mAuth.createUserWithEmailAndPassword(email, password)
                    .addOnCompleteListener(Register.this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            Toast.makeText(Register.this, "Signup Successfully", Toast.LENGTH_SHORT).show();


                            if (!task.isSuccessful()) {
                                spotsDialog.dismiss();
                                Toast.makeText(Register.this, "Signup failed." + task.getException(),
                                        Toast.LENGTH_SHORT).show();


                            } else {

                                spotsDialog.dismiss();

                                userID = mAuth.getCurrentUser().getUid();
                                User user = new User(edtName.getText().toString(), edtPhone.getText().toString(),
                                        edtEmail.getText().toString(), edtPassword.getText().toString(), edtConfirmPassword.getText().toString(), false);
                                user_tbl.child(userID).setValue(user);
                                startActivity(new Intent(Register.this, Login.class));

                            }
                        }
                    });

        }
    });

标签: androidfirebasefirebase-authentication

解决方案


您只需要使用 linkWithCredential() 即可在其中传递凭证,现在该凭证可以来自任何身份验证,例如 facebook、gmail。

试试这个代码:

 mAuth.getCurrentUser().linkWithCredential(credential)
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {
                Log.d(TAG, "linkWithCredential:success");
                FirebaseUser user = task.getResult().getUser();
                updateUI(user);
            } else {
                Log.w(TAG, "linkWithCredential:failure", task.getException());
                Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                        Toast.LENGTH_SHORT).show();
                updateUI(null);
            }

            // ...
        }
    });

推荐阅读