使用 FireBase facebook 身份验证登录,getCurrentUser() 一直返回 null
Logging in with FireBase facebook authentication, getCurrentUser() keeps returning null
当我使用 Facebook(使用 firebase 身份验证)登录时,我现在正在努力传递 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 对象是一个单例对象,用于存储用户的信息。但是,它永远不会达到那个,因为用户总是空的。
我添加了一个AuthStateListener,它说没有currentuser。我的问题是,当 currentUser 一直返回 null 时,我不知道如何检索它?我登录中的其他所有内容 activity 都遵循提供的 firebase 快速指南,以使用 Facebook 登录。
好的,我解决了我的问题。
所以我尝试将 currentUser 添加到我的 updateUi() 方法中。然后我的问题似乎是,我在 facebookCallback() 中更新了 UI,这似乎在实际处理登录之前更改了 activity。
所以现在我的代码如下所示:
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();
}
}
});
}
当我使用 Facebook(使用 firebase 身份验证)登录时,我现在正在努力传递 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 对象是一个单例对象,用于存储用户的信息。但是,它永远不会达到那个,因为用户总是空的。
我添加了一个AuthStateListener,它说没有currentuser。我的问题是,当 currentUser 一直返回 null 时,我不知道如何检索它?我登录中的其他所有内容 activity 都遵循提供的 firebase 快速指南,以使用 Facebook 登录。
好的,我解决了我的问题。
所以我尝试将 currentUser 添加到我的 updateUi() 方法中。然后我的问题似乎是,我在 facebookCallback() 中更新了 UI,这似乎在实际处理登录之前更改了 activity。
所以现在我的代码如下所示:
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();
}
}
});
}