2017-01-22 2 views
5

У меня есть DispatchActivity как моя активность Launcher, которая предназначена для проверки того, есть ли пользователь, который в настоящий момент зарегистрировался. Если пользователь зарегистрирован, я отправляю их в свой ProfileActivity. В противном случае я отправляю их в LogInActivity. Вот мой код в DispatchActivity:Android FirebaseAuth.getCurrentUser() Never Null

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_dispatch); 

    //..................... 

    auth = FirebaseAuth.getInstance(); 

    authListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 
      if (user != null) { 
       launchProfileActivity(); 
      } else { 
       // User is signed out 
       launchLoginActivity(); 
      } 
     } 
    }; 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    auth.addAuthStateListener(authListener); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    if (authListener != null) { 
     auth.removeAuthStateListener(authListener); 
    } 
} 

Независимо от того, что я делаю, firebaseAuth.getCurrentUser(), никогда не возвращается нуль на моем первичном устройстве тестирования. Согласно Документам, getCurrentUser() будет иметь значение null, если только пользователь не зарегистрирован. Когда я регистрирую некоторые данные этого пользователя, они согласуются с пользователем «Test», который я создал ранее (например, вызовом user.getEmail() возвращает «[email protected]».

Это проблематично, так как я безусловно не имеют каких-либо пользователей в моей базе данных пользователей консоли (в Authentication/Users). Я удалил этот тест пользователя из базы данных некоторые время назад, и база данных пуста.

Я попытался запустить приложение на другом устройстве, и выполняется должным образом. Тем не менее, не выполняя новую установку на моем первичном устройстве тестирования делает нет t исправить проблему.

Вопрос: Насколько я вижу, проблема связана с каким-то постоянным состоянием пользователя с моим устройством; поскольку работает другое устройство работает нормально. Поскольку я не намеренно настраивал это, я хотел бы знать, что вызывает эту несогласованность между моей Auth User Database и Device.

Если база данных пуста, то где auth.getCurrentUser() получает этот ранее удаленный пользовательский объект?

спасибо.

+0

Я знаю, что вы сказали, что вы переустановили приложение, но попробуйте перейти к настройкам приложения и очистить все данные приложения от телефона. –

ответ

3

Firebase Authentication будет кэшировать токен аутентификации для пользователя при входе в систему. Это предотвращает необходимость аутентификации каждого небольшого взаимодействия, которое пользователь делает с помощью других услуг, предоставляемых Firebase. Этот токен автоматически обновляется, но до этого SDK предполагает, что токен представляет пользователя. Вы обнаружите, что токен истекает через некоторое время, или вы можете заставить проблему удалить, переустановить приложение или очистить его данные.

Аутентификация работает независимо от содержимого вашей базы данных реального времени. Они независимы друг от друга, за исключением случаев, когда правила безопасности ограничивают доступ к аутентифицированному пользователю.

+0

На ваш последний комментарий: Я думаю, что OP ссылается на список пользователей в разделе «Аутентификация/Пользователи» в качестве базы данных. Само по себе правильное, но действительно запутанное. –

+1

Есть ли что-нибудь, что я могу сделать в производственном приложении? Насколько это «некоторое время»? Спасибо –

+0

@DougStevenson «Вы обнаружите, что токен истечет через некоторое время». Есть ли конкретное время? Кроме того, что, если пользователь не имеет Wi-Fi или данных, будет ли аутентификация Firebase работать? –

0

У меня был такой же точный вопрос, и я не мог найти ответ на эту проблему в любом месте. Я все пробовал. Я не знаю, почему это работает, но я перезапустил свой телефон, и случилось все исправить. Супер поздно, но надеюсь, что это поможет кому-то еще с той же проблемой.