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