我允许用户使用Google,Facebook或电子邮件注册。请遵循此link我知道如何将多个身份验证提供程序链接到同一帐户,但这是我的方案
假设用户使用Google或Facebook创建帐户,但稍后(在创建帐户后)他想设置密码,以便他也可以使用电子邮件和密码登录。我知道如何将电子邮件/密码帐户与其他联盟提供商(谷歌,Facebook)链接,但不是相反。我唯一的办法就是创建一个新帐户,其新密码和电子邮件与他们在早期阶段选择的方法相关联,但由于电子邮件已经存在,它将无法运行。我甚至在我的控制台启用了allow multiple account with same address
,但它返回ERROR_EMAIL_ALREADY_IN_USE
,所以我认为它不适用于电子邮件/密码。
那么在用Facebook或Google注册后如何为该帐户添加密码?谢谢你们。
答案 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)
}
}
已被弃用。