Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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进行电话号码身份验证,使用FirebaseUI库管理身份验证阶段,如下所示: startActivityForResult( AuthUI.getInstance() .createSignInIntentBuilder() .setIsSmartLockEnabled(true) .setAvailableProviders( Arrays.asList(new AuthUI.IdpCon

我正在使用Firebase进行电话号码身份验证,使用FirebaseUI库管理身份验证阶段,如下所示:

startActivityForResult(
AuthUI.getInstance()
        .createSignInIntentBuilder()
        .setIsSmartLockEnabled(true)
        .setAvailableProviders(
                Arrays.asList(new AuthUI.IdpConfig.Builder(AuthUI.PHONE_VERIFICATION_PROVIDER).build()))
        .build(),
RC_SIGN_IN);
活动结果由活动结果上的
处理,处理方式如下:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RC_SIGN_IN) {
        IdpResponse response = IdpResponse.fromResultIntent(data);

        if (resultCode == RESULT_OK) {
            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
            afterRegister(user);
            finish();
            return;
        } else {
            // Sign in failed
            if (response == null) {
                // User pressed back button
                ToastUtil.showSnackbar(this,R.string.sign_in_cancelled);
                return;
            }

            if (response.getErrorCode() == ErrorCodes.NO_NETWORK) {
                ToastUtil.showSnackbar(this,R.string.no_internet_connection);
                return;
            }

            if (response.getErrorCode() == ErrorCodes.UNKNOWN_ERROR) {
                ToastUtil.showSnackbar(this,R.string.unknown_error);
                return;
            }
        }

        ToastUtil.showSnackbar(this,R.string.unknown_sign_in_response);
    }
}
注册后,我尝试更新FirebaseUser实例上的电子邮件和显示名称:

final String email = "myuser@email.com";
final FirebaseUser firebaseUser =  FirebaseAuth.getInstance().getCurrentUser();
firebaseUser.updateEmail(email).addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        boolean success = task.isSuccessful();
        if(!success){
            task.getException().printStackTrace();
        }
    }
});

我现在的问题是:如何“再次登录”?此特定案例的文档很差。

更改电子邮件是敏感信息,如果发现异常FirebaseAuthRecentLoginRequiredException,则必须使用OTP重新验证用户,然后再次返回以完成更新用户电子邮件的任务。 对我来说,这是工作

btnSave.setOnClickListener {
        FirebaseAuth.getInstance().currentUser?.updateEmail(edEmail.text.toString())
            ?.addOnCompleteListener { task ->
                if (task.isSuccessful) {
                    Log.d("UPDATE EMAIL", "User email address updated success.")
                }else{
                    try {
                        throw task.exception!!
                    } catch (e: FirebaseAuthRecentLoginRequiredException) {
                        /**
                         * handle this to re-auth User, e.g Open OTP page
                         * */
                    } catch (e: FirebaseAuthInvalidCredentialsException) {
                    } catch (e: FirebaseAuthUserCollisionException) {
                    } catch (e: Exception) {
                    }
                }
            }
    }
您可以在此处阅读如何使用重要注释更新电子邮件:

你找到答案了吗?我对解决方案很好奇:)仍然不是:(我将使用实时数据库来存储用户信息,而不是FirebaseUser
btnSave.setOnClickListener {
        FirebaseAuth.getInstance().currentUser?.updateEmail(edEmail.text.toString())
            ?.addOnCompleteListener { task ->
                if (task.isSuccessful) {
                    Log.d("UPDATE EMAIL", "User email address updated success.")
                }else{
                    try {
                        throw task.exception!!
                    } catch (e: FirebaseAuthRecentLoginRequiredException) {
                        /**
                         * handle this to re-auth User, e.g Open OTP page
                         * */
                    } catch (e: FirebaseAuthInvalidCredentialsException) {
                    } catch (e: FirebaseAuthUserCollisionException) {
                    } catch (e: Exception) {
                    }
                }
            }
    }