如何为使用电话身份验证进行身份验证的用户添加电子邮件地址

时间:2020-01-19 11:29:53

标签: android firebase firebase-authentication

我想为选择电话验证的用户添加电子邮件地址,并为通过电子邮件或Google登录进行验证的用户添加电话号码。

4 个答案:

答案 0 :(得分:2)

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

auth.getCurrentUser()。linkWithCredential(凭据)

检查此链接https://firebase.google.com/docs/auth/android/account-linking

答案 1 :(得分:2)

根据official doc,您可以使用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.");
            }
        }
    });

在科特林:

val user = FirebaseAuth.getInstance().currentUser

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

答案 2 :(得分:1)

更新或添加电子邮件是重要且敏感的信息,其他答案虽然突出了重要的步骤,但他们忘记提及必须对用户进行身份验证才能使其解决方案正常工作。如果用户最近未通过身份验证,则Firebase会引发异常-FirebaseAuthRecentLoginRequiredException(请参阅documentation)。

让我们看一下正式的文档示例。

更新或添加电子邮件地址docs

val user = FirebaseAuth.getInstance().currentUser

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

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

重新认证用户docs

直接从文档中删除:


// 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

答案 3 :(得分:-1)

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