Невозможно использовать signInWithEmailAndPassword в приложении флаттера в автономном режиме - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь использовать Firebase Auth в приложении Flutter, которое также использует Cloud Firestore. У меня проблема в том, что делать в автономном режиме.

Я регистрирую имя пользователя и пароль и пытаюсь войти, используя следующий код:

    _user = await _auth.signInWithEmailAndPassword(email: account, password: myPassword).catchError((error) {
  print(error);
});

await _user.getIdToken().catchError((error) {
  // The error source may be that they are not currently connected to the internet
  print(error);
});
final FirebaseUser currentUser = await _auth.currentUser();

Проблема в том, что signInWithEmailAndPassword не работает, когда я не в сети. Мне нужен объект FirebaseUser для доступа к Cloud Firestore. Я читал о сохранении состояния аутентификации, но, похоже, он недоступен для Flutter.

Я знаю, что это должно сработать, и я слишком новичок, чтобы понимать, как использовать Firebase Auth с Cloud Firestore в автономном режиме. Чего мне не хватает?

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

Как вы аутентифицируете пользователя без подключения к серверу аутентификации?
Вам необходимо активное соединение для аутентификации пользователя.
Вы можете хранить данные базы данных Firebase Cloud Firestore / Realtime в телефоне (Disk Persistence), ноне Аутентификация, так как это предотвращает неправомерный доступ из локального хранилища.

Таким образом, один из способов справиться с этим - показывать диалог входа в систему только тогда, когда устройство пользователя подключено к сети и / или подключен к Firebase .

0 голосов
/ 13 сентября 2018

Решение состоит в том, чтобы проверить, аутентифицирован ли уже пользователь. Документация Firebase гласит:

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

Так что я просто проверяю 1-й. Вот код:

// If user is already logged in, currentUser will return the authenticated user
// Otherwise, _user will be null.
_user = await _auth.currentUser();
if(_user == null) {
  _user = await _auth.signInWithEmailAndPassword(email: account, password: myPassword).catchError((error) {
    print(error);
  });
}
0 голосов
/ 13 сентября 2018

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

...