簡體   English   中英

firebase.auth.FirebaseUser.linkWithCredential 拋出空指針異常

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

我應該如何將現有用戶帳戶與不同的提供商但相同的電子郵件聯系起來? 例如谷歌和 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);
                }
            }
        });
    }

在下面的方法中,' 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);
                           }

                           // ...
                       }
                   });

    }

日志貓:

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)

任何建議表示贊賞。 謝謝你。

mAuth.getCurrentUser()返回空 FirebaseUser,因為在調用它時沒有用戶登錄。 您的代碼應該在調用 FirebaseUser 對象上的方法之前檢查這一點,如getCurrentUser()的 API 文檔所示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM