【问题标题】:Firebase phone Auth for Android , Can we just verify phone number without creating a user accountFirebase phone Auth for Android , 我们可以在不创建用户帐户的情况下验证电话号码吗
【发布时间】:2017-06-12 10:33:07
【问题描述】:

我正在开发一个 android 应用程序,我只想在其中验证手机号码而不创建用户帐户。可能吗?我正在使用以下代码

   private void startPhoneNumberVerification(String phoneNumber) {

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

}



private void verifyPhoneNumberWithCode(String verificationId, String code) {

    PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);


     signInWithPhoneAuthCredential(credential); // this function is creating user account , if not present. But We Don't want this


}

如果用户帐户不存在,以下函数将创建用户帐户,但我不想创建帐户,我只是想验证用户输入的代码。有没有可用的回调方法?

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



                        dialog.dismiss();
                        FirebaseUser user = task.getResult().getUser();

                        Toast.makeText(LoginActivity.this, "Success " + user.getEmail(), Toast.LENGTH_SHORT).show();


                    } else {

                        Toast.makeText(LoginActivity.this, "Failed ", Toast.LENGTH_SHORT).show();

                        verifyPhoneNumberWithCode(mVerificationId, editText.getText().toString().trim());

                    }
                }
            });
}

【问题讨论】:

    标签: android firebase firebase-authentication


    【解决方案1】:

    如果在此过程中未将电话提供商与 Firebase 用户相关联,您将无法验证用户输入的内容。

    但您可以在不久后通过以下方式取消手机与用户帐户的关联:

    FirebaseAuth.getInstance().getCurrentUser().
            unlink(PhoneAuthProvider.PROVIDER_ID)
            .addOnCompleteListener(this, onCompleteListener);
    

    验证用户是否有权访问此电话号码有很多用途,但不应使用它登录。我真的认为 Firebase 应该允许开发人员先验证,然后使用凭据登录。

    还有:

    Google Play 服务很有可能会自动验证。当您的PhoneAuthProvider.OnVerificationStateChangedCallbacks 中的onVerificationCompleted(PhoneAuthCredential) 被调用时。这样用户就不需要输入验证码,手机也不会自动绑定。

    【讨论】:

      【解决方案2】:

      验证电话号码会自动为该用户创建一个 Firebase 身份验证帐户。无法阻止创建此帐户,因为 Firebase 使用它来确保在用户下次启动应用时知道该用户。

      【讨论】:

        【解决方案3】:

        您还可以更新用户帐户上的电话号码。

        这不会创建新用户;相反,它会更新现有用户帐户中的电话号码。

        val credential = PhoneAuthProvider.getCredential(verificationId!!, smsCode)
        FirebaseAuth.getInstance().currentUser?.updatePhoneNumber(credential)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-27
          • 2020-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-23
          相关资源
          最近更新 更多