使用FireBase Facebook身份验证登录,getCurrentUser()始终返回null

时间:2018-11-29 09:50:14

标签: android facebook firebase firebase-authentication facebook-authentication

当我使用Facebook登录(使用Firebase身份验证)时,我现在正在努力传递CurrentUser。它以前一直在工作,但是当我现在登录我的应用程序时,currentuser一直返回null。

我认为可能是因为我已经使用Facebook登录到该应用程序,但是Firebase身份验证将我视为新用户。但是,我不确定。

我在“登录”页面上的onStart看起来如下:

@Override
public void onStart() {
    super.onStart();

    // Check if user is signed in (non-null) and update UI accordingly.
    mAuth.addAuthStateListener(mAuthListener);
    FirebaseUser currentUser = mAuth.getCurrentUser();
    if (currentUser != null && AccessToken.getCurrentAccessToken() != null) {
        Log.d(TAG, "onComplete: We run this 2" + currentUser + mAuth);
        ItemHolder.getInstance().setUser(mAuth.getCurrentUser());
        updateUI();
    }
    else{
        Log.d(TAG, "onComplete: else run in onstart");
    }
}

ItemHolder对象是用于存储用户信息的单例。但是,由于用户始终为null,因此永远无法达到目标。

我添加了AuthStateListener,它说没有currentuser。我的问题是我不知道如何在currentUser持续返回null时检索它?登录活动中的所有其他操作均遵循提供的firebase快速指南,以使用Facebook登录。

1 个答案:

答案 0 :(得分:0)

好的,我解决了我的问题。

因此,我尝试将currentUser添加为实际上属于我的updateUi()方法的一部分。然后看来我的问题是,我在我的facebookCallback()中更新了UI,这似乎在实际处理登录名之前更改了活动。

所以现在我的代码如下:

private void facebookCallback() {
    FBLoginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            Log.d(TAG, "onComplete: onSuccess");
            handleFacebookAccessToken(loginResult.getAccessToken());
        }

private void handleFacebookAccessToken(AccessToken token) {
    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        FirebaseUser user = mAuth.getCurrentUser();
                        Log.d(TAG, "onComplete: We run this");
                        updateUI(user);
                    }
                    else{
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        Toast.makeText(LogInActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                    }
                }
            });
}