【发布时间】:2018-09-12 11:09:52
【问题描述】:
我在理解如何将现有电子邮件帐户链接到匿名 Firebase 帐户时遇到了一些麻烦。这可能吗 ?还是仅在电子邮件帐户是新帐户时才链接?
当我调用以下代码来链接帐户时,匿名帐户和现有帐户都存在。但是如果它是一个新的电子邮件帐户,那么我会看到新的电子邮件帐户与匿名帐户的 uid 相同,并且匿名帐户已经消失。
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);
}
// ...
}
});
所以我的问题是:我可以将匿名用户帐户链接到现有用户帐户吗?因为那时我的firebase控制台将充满匿名用户条目。
更新:使用 firebase mergService here 如何删除匿名帐户?我没有看到它返回凭据让我删除。
mergeService 描述如下:
public class MyManualMergeService extends ManualMergeService {
private Iterable<DataSnapshot> mChatKeys;
@Override
public Task<Void> onLoadData() {
final TaskCompletionSource<Void> loadTask = new TaskCompletionSource<>();
FirebaseDatabase.getInstance()
.getReference()
.child("chatIndices")
.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
mChatKeys = snapshot.getChildren();
loadTask.setResult(null);
}
@Override
public void onCancelled(DatabaseError error) {
FirebaseCrash.report(error.toException());
}
});
return loadTask.getTask();
}
@Override
public Task<Void> onTransferData(IdpResponse response) {
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference chatIndices = FirebaseDatabase.getInstance()
.getReference()
.child("chatIndices")
.child(uid);
for (DataSnapshot snapshot : mChatKeys) {
chatIndices.child(snapshot.getKey()).setValue(true);
DatabaseReference chat = FirebaseDatabase.getInstance()
.getReference()
.child("chats")
.child(snapshot.getKey());
chat.child("uid").setValue(uid);
chat.child("name").setValue("User " + uid.substring(0, 6));
}
return null;
}
}
在用户从匿名用户转换为真实帐户后调用此方法。那么我如何知道凭据以便删除匿名帐户?
【问题讨论】:
-
Firebase 团队已回答您的问题! youtu.be/lbGEu0PNsfY?t=1m57s
-
我没想到来源本身会给出答案。哈哈,谢谢你的更新。
标签: firebase firebase-authentication