简体   繁体   English

firebase.auth.FirebaseUser.linkWithCredential 抛出空指针异常

[英]firebase.auth.FirebaseUser.linkWithCredential throws null pointer exception

How should I link an existing user account with different providers but the same email?我应该如何将现有用户帐户与不同的提供商但相同的电子邮件联系起来? For example Google with Facebook.例如谷歌和 Facebook。

public void handleFacebookAccessToken(final AccessToken token, final Activity activity) {
        Log.d(TAG, "handleFacebookAccessToken: " + token);

        final AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(activity, new OnCompleteListener<AuthResult>() {

                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success, update UI with the signed-in user's information
                            Log.d(TAG, "signInWithCredential:success");
                            FirebaseUser user = mAuth.getCurrentUser();
                            authListener.updateSignedUI(user);
                        }
                    }
                }).addOnFailureListener(activity, new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "signInWithCredential:failure", e);
                if (e instanceof FirebaseAuthUserCollisionException) {
                    handleLinkingFacebookUsers(credential, activity);
                }
            }
        });
    }

In this below method at line with ' mAuth.getCurrentUser().linkWithCredential() NullPointerException occuring.在下面的方法中,' mAuth.getCurrentUser().linkWithCredential() NullPointerException 发生。

    private void handleLinkingFacebookUsers(AuthCredential savedFBCredential, Activity activity) {
        //AuthCredential credentialFacebook = FacebookAuthProvider.getCredential(token.getToken());
        //AuthCredential credentialGoogle = GoogleAuthProvider.getCredential(googleIdToken, null);
           mAuth.getCurrentUser()
                   .linkWithCredential(savedFBCredential)   // THIS LINE TROWS NULL POINTER EXCEPTION
                   .addOnCompleteListener(activity, new OnCompleteListener<AuthResult>() {
                       @Override
                       public void onComplete(@NonNull Task<AuthResult> task) {
                           if (task.isSuccessful()) {
                               Log.d(TAG, "linkWithCredential:success");
                               FirebaseUser user = task.getResult().getUser();
                               authListener.updateSignedUI(user);
                           } else {
                               Log.w(TAG, "linkWithCredential:failure", task.getException());
                               authListener.updateSignedUI(null);
                           }

                           // ...
                       }
                   });

    }

Logcat:日志猫:

com.google.firebase.auth.FirebaseAuthUserCollisionException: An account already exists with the same email address but different sign-in credentials. Sign in using a provider associated with this email address.
        at com.google.firebase.auth.api.internal.zzdv.zza(com.google.firebase:firebase-auth@@19.2.0:42)
        at com.google.firebase.auth.api.internal.zzfc.zza(com.google.firebase:firebase-auth@@19.2.0:19)
        at com.google.firebase.auth.api.internal.zzes.zza(com.google.firebase:firebase-auth@@19.2.0:34)
        at com.google.firebase.auth.api.internal.zzeu.zza(com.google.firebase:firebase-auth@@19.2.0:98)
        at com.google.firebase.auth.api.internal.zzeu.zza(com.google.firebase:firebase-auth@@19.2.0:85)

Any suggestion is appreciated.任何建议表示赞赏。 Thank you.谢谢你。

mAuth.getCurrentUser() is returning a null FirebaseUser because there is no user signed in at the time it was called. mAuth.getCurrentUser()返回空 FirebaseUser,因为在调用它时没有用户登录。 Your code should check for this before calling methods on the FirebaseUser object, as showing the API documentation for getCurrentUser() .您的代码应该在调用 FirebaseUser 对象上的方法之前检查这一点,如getCurrentUser()的 API 文档所示。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM