Flutter Firebase Auth Аноним currentUser () возвращает ноль - PullRequest
0 голосов
/ 12 марта 2020

Мы разработали и протестировали приложение Flutter. Все работает как положено. Мы развернули приложение в магазинах и получили несколько пользователей.

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

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

Что общего у пользователей с потерянными данными:

  • iOS устройств (не уверен, если релевантный),
  • не использовал приложение по крайней мере несколько дней.

Наш процесс аутентификации пользователя:

  • Запускается приложение,
  • Все сервисы инициализируются в методе main(),
  • AuthService инициализируют final _auth = FirebaseAuth.instance; и вызывают loginUser(),
  • loginUser() метод выполняет:
void loginUser() async {
  FirebaseUser user = await _auth.currentUser();

  if (user == null) {
    AuthResult result = await _auth.signInAnonymously();
    user = result.user;
  }

  IdTokenResult userToken = await user.getIdToken();
  print('USER');
  print('    UID: ${user.uid}');
  print('    Token: ${userToken.token}');
  print('    Expires: ${userToken.expirationTime}');
}

Мы используем версии:

  • flutter: v1.12.13+hotfix.7
  • firebase_core: ^0.4.0+8
  • firebase_auth: ^0.14.0+5

У нас не было проблем с зарегистрированными пользователями.

Вопросы:

  • В каких случаях this._auth.currentUser() возвращает ноль?
  • Есть ли срок действия анонимной учетной записи?
  • есть способ воспроизвести эту проблему?
  • Кто-то сталкивался с такой же проблемой?
  • Что мы делаем не так?
  • Как этого избежать для анонимных пользователей?

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Просто распространяясь на ответ @ mFeinstein

Анонимный токен авторизации сохраняется на диске и восстанавливается только при повторном вызове signInAnonymously. Трудно сказать, не глядя на указанную реализацию c, но могла возникнуть некоторая вторичная проблема, которая приводила к возвращению нулевого значения при вызове currentUser(), приводящая к генерации нового анонимного идентификатора пользователя.

Как этого избежать для анонимных пользователей?

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

Более подробную информацию об аутентификации провайдера можно найти здесь: https://firebase.google.com/docs/auth/ios/custom-auth

1 голос
/ 17 марта 2020
  • В каких случаях this._auth.currentUser () возвращает ноль?

Согласно документам, currentUser() должен возвращать ноль только в том случае, если нет зарегистрированного пользователя.

  • Есть ли срок действия анонимной учетной записи?

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

  • Есть ли способ воспроизвести эту проблему?

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

  • Кто-то испытывал ту же проблему?

Я не знаю t использовать анонимных пользователей.

  • Что мы делаем не так?
  • Как этого избежать для анонимных пользователей?

Я полагаю, анонимные пользователи не должны ' Если вы хотите сохранить данные своего пользователя в течение длительного времени, вы должны обновить их до постоянной учетной записи . Но поддержка Firebase должна прояснить это для вас.

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