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

时间:2017-09-19 22:31:23

标签: firebase firebase-authentication

我允许用户使用Google,Facebook或电子邮件注册。请遵循此link我知道如何将多个身份验证提供程序链接到同一帐户,但这是我的方案

假设用户使用Google或Facebook创建帐户,但稍后(在创建帐户后)他想设置密码,以便他也可以使用电子邮件和密码登录。我知道如何将电子邮件/密码帐户与其他联盟提供商(谷歌,Facebook)链接,但不是相反。我唯一的办法就是创建一个新帐户,其新密码和电子邮件与他们在早期阶段选择的方法相关联,但由于电子邮件已经存在,它将无法运行。我甚至在我的控制台启用了allow multiple account with same address,但它返回ERROR_EMAIL_ALREADY_IN_USE,所以我认为它不适用于电子邮件/密码。

那么在用Facebook或Google注册后如何为该帐户添加密码?谢谢你们。

1 个答案:

答案 0 :(得分:0)

来自Stetho

  

电子邮件密码登录

AuthCredential

然后,您将凭据与现有的Google / Facebook帐户链接:

  

linkWithCredential对象传递给已登录用户的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); } // ... } }); 方法:

signInAndRetrieveDataWithCredential

<强>更新

使用linkWithCredential代替linkWithCredential,因为class CurrentTraveler: SafeJsonObject { var name: String? var profileImageUrl: String? var travelingPlace: String? init(dictionary: [String: AnyObject]) { super.init() self.name = dictionary["name"] as? String self.profileImageUrl = dictionary["profileImageUrl"] as? String self.travelingPlace = dictionary["users/uid/Places"] as? String setValuesForKeys(dictionary) } } 已被弃用。