firebase signInWithEmailLink 删除了 firebase 帐户中的 phone 个号码

firebase signInWithEmailLink removes phone number in firebase account

我在使用 firebase 无密码身份验证时遇到问题。我的应用程序允许用户使用 phone 号码或电子邮件 link.

登录

用户在 firebase 中的帐户在 signInWithEmailLink 尝试登录时丢失了它的 phone 号码,但他成功登录了。

这是当用户通过动态 link 从他的邮件重定向到应用程序时执行的代码片段:

FirebaseDynamicLinks.getInstance()
                .getDynamicLink(activity.getIntent())
                .addOnSuccessListener(activity, pendingDynamicLinkData -> {
                    
                    Uri deepLink = null;
                    if (pendingDynamicLinkData != null) {
                        
                        deepLink = pendingDynamicLinkData.getLink();
                        String emailLink = deepLink.toString();
                        String authEmail = activity.getPreferences(Context.MODE_PRIVATE).getString("link_auth_email",null);
                        if(authEmail != null){
                            Helper.showProgressDialog(activity);
                            firebaseAuth.signInWithEmailLink(authEmail,emailLink).addOnCompleteListener(activity,task ->{
                                if(task.isSuccessful()){
                                    firebaseUser = task.getResult().getUser();
                                    name = firebaseUser.getDisplayName();
                                    phone = firebaseUser.getPhoneNumber();
                                    email = firebaseUser.getEmail();
                                    image = firebaseUser.getPhotoUrl();
                                    firebaseUser.getIdToken(true).addOnCompleteListener(activity, task1 -> {
                                        Helper.hideProgressDialog();
                                        if(task1.isSuccessful()){
                                            token = task1.getResult().getToken();
                                        }else if(task1.getException() !=null){
                                            Toast.makeText(activity, task1.getException().getMessage(), Toast.LENGTH_SHORT).show();
                                        }
                                    });
                                }else{
                                    Helper.hideProgressDialog();
                                    Toast.makeText(activity, "Authentication failed. "+(task.getException().getMessage()==null?"":task.getException().getMessage()), Toast.LENGTH_SHORT).show();
                                }
                            });
                        }
                    }
                    else{
                        
                        firebaseUser = firebaseAuth.getCurrentUser();
                        if(firebaseUser != null){
                            name = firebaseUser.getDisplayName();
                            phone = firebaseUser.getPhoneNumber();
                            email = firebaseUser.getEmail();
                            image = firebaseUser.getPhotoUrl();
                            firebaseUser.getIdToken(true).addOnCompleteListener(activity, task -> {
                                if(task.isSuccessful()){
                                    token = task.getResult().getToken();
                                }else if(task.getException() !=null){
                                    Toast.makeText(activity, task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                                }
                            });
                        }
                    }
                })
                .addOnFailureListener(activity, e -> Toast.makeText(activity, "Link failure: "+e.getMessage(), Toast.LENGTH_SHORT).show());

Firebase 依赖项:

    implementation 'com.google.firebase:firebase-auth:19.3.2'
    implementation 'com.google.firebase:firebase-dynamic-links:19.0.0'
    implementation 'com.google.firebase:firebase-analytics:17.4.4'

这是因为我在 phone 身份验证进度后通过 updateEmail 方法在注册时向用户添加了电子邮件,而不是使用 linkwithcredential