#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-й раз, нажав.