Firebase向现有联合提供程序添加/链接密码

Firebase向现有联合提供程序添加/链接密码,firebase,firebase-authentication,Firebase,Firebase Authentication,我允许用户注册谷歌、Facebook或电子邮件。我知道如何将多个身份验证提供程序链接到同一个帐户,但下面是我的场景 比如说,一个用户在谷歌或Facebook上创建了一个帐户,但后来(在他的帐户创建之后)他想设置密码,这样他就可以用电子邮件和密码登录了。我知道如何将电子邮件/密码帐户与其他联邦提供商(谷歌、facebook)链接,但不知道如何将其链接。我唯一的想法是创建一个新帐户,使用新密码和与他们早期选择的方法相关联的电子邮件,但由于电子邮件已经存在,它将不起作用。我甚至在我的控制台上启用了允许

我允许用户注册谷歌、Facebook或电子邮件。我知道如何将多个身份验证提供程序链接到同一个帐户,但下面是我的场景

比如说,一个用户在谷歌或Facebook上创建了一个帐户,但后来(在他的帐户创建之后)他想设置密码,这样他就可以用电子邮件和密码登录了。我知道如何将电子邮件/密码帐户与其他联邦提供商(谷歌、facebook)链接,但不知道如何将其链接。我唯一的想法是创建一个新帐户,使用新密码和与他们早期选择的方法相关联的电子邮件,但由于电子邮件已经存在,它将不起作用。我甚至在我的控制台上启用了
允许使用相同地址的多个帐户
,但它返回
错误\u电子邮件\u已在使用中
,因此我认为它不适用于电子邮件/密码

那么,在注册Facebook或Google后,我如何向该帐户添加密码呢?感谢您的建议。

来自:

电子邮件密码登录

然后您将凭证与现有的Google/Facebook账户链接到:

AuthCredential
对象传递给登录用户的
linkWithCredential
方法:

mAuth.getCurrentUser().linkWithCredential(凭证)
.addOnCompleteListener(这是新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Log.d(标记“linkWithCredential:success”);
FirebaseUser=task.getResult().getUser();
updateUI(用户);
}否则{
w(标记“linkWithCredential:failure”,task.getException());
Toast.makeText(匿名AuthActivity.this,“身份验证失败”,
吐司。长度(短)。show();
updateUI(null);
}
// ...
}
});
更新

使用
signandretrievedatawithcredential
而不是
linkWithCredential
,因为
linkWithCredential
已被弃用

AuthCredential credential = EmailAuthProvider.getCredential(email, password);
mAuth.getCurrentUser().linkWithCredential(credential)
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {
                Log.d(TAG, "linkWithCredential:success");
                FirebaseUser user = task.getResult().getUser();
                updateUI(user);
            } else {
                Log.w(TAG, "linkWithCredential:failure", task.getException());
                Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                        Toast.LENGTH_SHORT).show();
                updateUI(null);
            }
            // ...
        }
    });