Почему FirebaseAuth.IdTokenChanged вызывается 2 раза при входе в систему? - PullRequest
0 голосов
/ 01 апреля 2019

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

Я использовал ту же логику, которая описана в примере проекта Firebase.Чтобы убедиться, что это не моя ошибка, я проверяю чистый пример проекта, и результат все тот же - как-то OnIdTokenChanged вызывается дважды при входе в систему.Оба обратных вызова содержат правильный токен.Я нахожусь на Unity 2018.3.5f1, .NET 4.5 и Firebase SDK v.5.4.4

Вот пример кода:

public virtual void Start() {
  Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
    dependencyStatus = task.Result;
    if (dependencyStatus == Firebase.DependencyStatus.Available) {
      InitializeFirebase();
    } else {
      Debug.LogError(
        "Could not resolve all Firebase dependencies: " + dependencyStatus);
    }
  });
}

protected void InitializeFirebase() {
  DebugLog("Setting up Firebase Auth");
  auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
  auth.StateChanged += AuthStateChanged;
  auth.IdTokenChanged += IdTokenChanged;
}

void IdTokenChanged(object sender, System.EventArgs eventArgs) {
  Firebase.Auth.FirebaseAuth senderAuth = sender as Firebase.Auth.FirebaseAuth;
  if (senderAuth == auth && senderAuth.CurrentUser != null && !fetchingToken) {
    senderAuth.CurrentUser.TokenAsync(false).ContinueWith(
      // THIS CALLED TWICE
      task => DebugLog(String.Format("Token = {0}", task.Result)));
  }
}

Некоторая важная логика приложения основана на токенеполучить событие, которое должно быть получено только один раз, и совершенно неверно получать 2 токена за 1 вход в систему.

Это ошибка или ожидаемое поведение?Если ошибка, то есть ли такое же поведение на других платформах, таких как родной iOS / Android, или это просто проблема Unity3d?

1 Ответ

0 голосов
/ 01 апреля 2019

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

Из документации о событии IDTokenChanged :

Изменения токена идентификатора аутентификации:

  • Когда пользователь входит в систему
  • Когда текущий пользователь выходит из системы
  • Когда текущий пользователь меняется
  • При изменении токена текущего пользователя
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...