Android 如何为使用电话认证的用户添加电子邮件地址

Android 如何为使用电话认证的用户添加电子邮件地址,android,firebase,firebase-authentication,Android,Firebase,Firebase Authentication,我想为选择电话身份验证的用户添加电子邮件地址,并为使用电子邮件或谷歌登录进行身份验证的用户添加电话号码。您应该向用户是否插入电子邮件的数据库添加布尔变量。 最初,此变量的值将为false。如果用户通过电话号码登录,则将此变量设置为false,否则将其更改为true 您可以使用linkWithCredential()合并身份验证 auth.getCurrentUser().linkWithCredential(凭证) 检查此链接根据,您可以使用updateEmail方法设置用户的电子邮件地址,如下

我想为选择电话身份验证的用户添加电子邮件地址,并为使用电子邮件或谷歌登录进行身份验证的用户添加电话号码。

您应该向用户是否插入电子邮件的数据库添加布尔变量。
最初,此变量的值将为false。如果用户通过电话号码登录,则将此变量设置为false,否则将其更改为true

您可以使用linkWithCredential()合并身份验证

auth.getCurrentUser().linkWithCredential(凭证)

检查此链接

根据,您可以使用
updateEmail
方法设置用户的电子邮件地址,如下所示:

在Java中:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

user.updateEmail("user@example.com")
    .addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            if (task.isSuccessful()) {
                Log.d(TAG, "User email address updated.");
            }
        }
    });

更新或添加电子邮件是重要且敏感的信息,其他答案虽然强调了重要的步骤,但他们忘了提到用户最近必须经过身份验证才能使用其解决方案。如果用户最近未通过身份验证,Firebase将抛出异常-
FirebaseAuthRecentLoginRequiredException
(请参阅)

让我们浏览一下官方文档示例

更新或添加电子邮件地址()

如果用户最近未通过身份验证,该怎么办

重新验证了用户的身份()

再次直接从文档中取出:


// Get auth credentials from the user for re-authentication. The example below shows
// email and password credentials but there are multiple possible providers,
// such as GoogleAuthProvider or FacebookAuthProvider.
val credential = EmailAuthProvider
        .getCredential("user@example.com", "password1234")

// Prompt the user to re-provide their sign-in credentials
user?.reauthenticate(credential)
        ?.addOnCompleteListener { Log.d(TAG, "User re-authenticated.") }
在您的情况下,凭据提供程序将是
PhoneAuthProvider

val user = FirebaseAuth.getInstance().currentUser

user?.updateEmail("user@example.com")?.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        Log.d(TAG, "User email address updated.")
    }
}

// Get auth credentials from the user for re-authentication. The example below shows
// email and password credentials but there are multiple possible providers,
// such as GoogleAuthProvider or FacebookAuthProvider.
val credential = EmailAuthProvider
        .getCredential("user@example.com", "password1234")

// Prompt the user to re-provide their sign-in credentials
user?.reauthenticate(credential)
        ?.addOnCompleteListener { Log.d(TAG, "User re-authenticated.") }