У меня возникли проблемы с правильной аутентификацией пользователей Firebase с сообщениями об ошибках во Flutter

#firebase #authentication #dart #flutter

#firebase #аутентификация #dart #flutter

Вопрос:

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

Сначала я попробовал это с помощью Future, async и await внутри, но, следуя руководству udemy, и он не использовал это, поэтому я убрал это, но никакой разницы в том, как это работало. Единственное, что я делаю по-другому, чем в руководстве, — я также обновляю базу данных cloudstore.

 loginUser(_email, _password) {
    formkey.currentState.save();
    if (formkey.currentState.validate()) {
      _auth
          .signInWithEmailAndPassword(email: _email, password: _password)
          .catchError((e) {
        Fluttertoast.showToast(
            msg: e.message,
            toastLength: Toast.LENGTH_SHORT,
            gravity: ToastGravity.TOP,
            timeInSecForIos: 5,
            backgroundColor: Colors.red,
            textColor: Colors.white,
            fontSize: 16.0
        );
      }).then((newUser) {
        var now = new DateTime.now();
        Firestore.instance
            .collection('users')
            .document(newUser.uid)
            .collection('userInfo')
            .document('userInfo')
            .setData({
          'Last login': now,
        })
            .then((onValue) {
          print('Created it in sub collection');
        }).catchError((e) {
          print('======Error======== '   e);
        });
        getSignedInUser();
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => MyApp()),
        );
      });


    }
  }


  getSignedInUser() async {
    mCurrentUser = await _auth.currentUser();
    DocumentSnapshot result = await Firestore.instance.collection('users')
        .document(mCurrentUser.uid).collection('profile').document('profile')
        .get();
    String myResult = result['First Name'];
    Fluttertoast.showToast(
        msg: "Welcome $myResult!",
        toastLength: Toast.LENGTH_SHORT,
        gravity: ToastGravity.TOP,
        timeInSecForIos: 1,
        backgroundColor: Colors.red,
        textColor: Colors.white,
        fontSize: 16.0
    );
  }
}
  

При первом вводе неверного электронного письма я получаю ошибки в консоли, указывающие строку, в которой e.message вызывается с нулевым значением. если я снова нажму login, это выдаст мне правильное сообщение об ошибке. Теперь, если я введу правильный адрес электронной почты, но неправильный пароль (в том же запущенном экземпляре). в нем говорится, что имя пользователя не существует. Если я нажму на это снова, это выдаст мне правильное сообщение о неверном пароле. Есть идеи, что я делаю не так? Заранее спасибо

Комментарии:

1. вы пробовали регистрировать ошибку в catch помимо toast? Возможно, экземпляр toast обновляется не в первый раз. Если сообщение об ошибке такое же, то проблема с firebase auth sdk во flutter

2. да, я вошел в систему с помощью инструкции print и получаю те же сообщения, но в консоли

3. хм, может быть, я попробую другую версию аутентификации

4. попробовал пару разных версий и никаких изменений в поведении

5. попробовал и мое собственное сообщение об ошибке (вместо e.message), та же задержка. Кроме того, только что заметил, что если я вхожу с правильным именем пользователя и паролем, он говорит, что это неверно. Нажмите login еще раз с той же информацией, и он войдет во 2-й раз, нажав.