Firebase PhoneAuth。如何使用密码登录

时间:2019-03-10 15:17:29

标签: java android firebase firebase-authentication

我最近在我的应用中实现了电话身份验证。但是问题是我只能用它创建一个帐户。我无法重新登录。使用电子邮件身份验证,我们可以使用我们的电子邮件和密码登录。 这是我的代码:

public class PhoneReg extends AppCompatActivity {
    EditText editTextPhone, editTextCode;

    FirebaseAuth mAuth;

    String codeSent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_phone_reg);
        mAuth = FirebaseAuth.getInstance();

        editTextCode = findViewById(R.id.otp);
        editTextPhone = findViewById(R.id.getPhoneNo);

        findViewById(R.id.getCodebtn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sendVerificationCode();
            }
        });


        findViewById(R.id.registerrr).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                verifySignInCode();
            }
        });
    }
    private void verifySignInCode(){
        String code = editTextCode.getText().toString();
        PhoneAuthCredential credential = PhoneAuthProvider.getCredential(codeSent, code);
       signInWithPhoneAuthCredential(credential);

    }

    private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {



        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {

                            Intent setupIntent=new Intent(PhoneReg.this,SetupActivity.class);
                            startActivity(setupIntent);
                            finish();
                            Toast.makeText(getApplicationContext(),
                                    "Login Successfull", Toast.LENGTH_LONG).show();
                        } else {
                            if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
                                Toast.makeText(getApplicationContext(),
                                        "Incorrect Verification Code ", Toast.LENGTH_LONG).show();
                            }
                        }
                    }
                });
    }

    private void sendVerificationCode(){

        String phone = editTextPhone.getText().toString();

        if(phone.isEmpty()){
            editTextPhone.setError("Phone number is required");
            editTextPhone.requestFocus();
            return;
        }

        if(phone.length() < 10 ){
            editTextPhone.setError("Please enter a valid phone");
            editTextPhone.requestFocus();
            return;
        }


        PhoneAuthProvider.getInstance().verifyPhoneNumber(
                phone,        // Phone number to verify
                60,                 // Timeout duration
                TimeUnit.SECONDS,   // Unit of timeout
                this,               // Activity (for callback binding)
                mCallbacks);        // OnVerificationStateChangedCallbacks
    }



    PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

        @Override
        public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {

        }

        @Override
        public void onVerificationFailed(FirebaseException e) {

        }

        @Override
        public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
            super.onCodeSent(s, forceResendingToken);

            codeSent = s;
        }
    };
}

我可以通过电话验证注册我的用户。但是注销后,我无法选择使用任何字段登录。

我已经在不同的地方抬头寻找答案,但找不到。

1 个答案:

答案 0 :(得分:0)

Firebase电话号码身份验证将文本消息发送到带有链接的电话号码。当用户打开该链接时,Firebase知道他们收到了短信,并登录了。

在大多数情况下,您应该使用户保持登录状态。当他们重新启动应用程序时,Firebase将恢复其身份验证状态,并且您可以使用FirebaseAuth.getInstance().getCurrentUser()AuthStateListener来检测用户。

如果用户已注销(通常是因为您已明确将其注销),则可以通过重新验证来再次登录。因此,通过重新发送短信,如documentation on phone number authentication中所示。 Firebase将检测到这是同一用户,然后将其登录到现有用户帐户。


使用电子邮件和密码登录是Firebase身份验证的单独提供商。如果仅启用电话号码登录,则用户无法自动使用密码登录。

如果您要允许用户使用密码登录,则还必须将email+password authentication集成到您的应用中。然后,您link the authentication providers在一起,以便用户可以使用其中任何一个登录其帐户,