Flutter Firebase SignInWithEmailAndPassword() не может перехватить «PlatformException» в блоке tryAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Flutter Firebase SignInWithEmailAndPassword() не может перехватить «PlatformException» в блоке try

Сообщение Anonymous »

Я новичок и пытаюсь научиться разрабатывать мобильные приложения для Android и IOS с помощью Flutter. Я пытаюсь реализовать простую аутентификацию пользователя с помощью Firebase. У меня есть стандартный экран входа в систему с текстовыми полями и кнопкой с виджетом OnTap , который будет выполнять метод SignUserIn(), показанный ниже. Вот метод, который я выполняю:

Код: Выделить всё

final emailController = TextEditingController();
final passwordController = TextEditingController();
void signUserIn() async {
try { await FirebaseAuth.instance.signInWithEmailAndPassword(
email: emailController.text,
password: passwordController.text,
);
} on PlatformException catch (e) {
if (e.code == 'ERROR_INVALID_CREDENTIALS') {
wrongEmailMessage();
}
Я уверен, что блок try выполняется правильно, потому что, когда я ввожу действительные учетные данные пользователя, остальная часть моей программы выполняется так, как я ожидаю. Однако, когда я намеренно ввожу неверные учетные данные, мне выдается следующее сообщение из файла messages.pigeon.dart, который, как я считаю, является частью пакета импорта: firebase_auth/firebase_auth.dart';

Код: Выделить всё

Exception has occurred. PlatformException (PlatformException(ERROR_INVALID_CREDENTIAL, The supplied auth credential is incorrect, malformed or has expired., {}, null))
Однако я также вижу в консоли отладки:

Код: Выделить всё

E/RecaptchaCallWrapper(13275): Initial task failed for action RecaptchaAction(action=signInWithPassword)with exception - The supplied auth credential is incorrect, malformed or has expired.
Я видел сообщение, в котором объяснялось, что настройка защиты от атак с перечислением электронной почты включена по умолчанию, что скрывает такие коды, как «пользователь не найден» и « коды ответов неправильного пароля, которые задаются FirebaseAuthException. Человек предложил либо отключить его, либо «обработать новый, более общий код ошибки, который вы получаете», без каких-либо инструкций о том, как это сделать, я просто изо всех сил старался перехватить исключение другим способом.
Я пробовал много разных вариантов части после блока try. Некоторые из них включают в себя:

Код: Выделить всё

} on FirebaseAuthException {
} on PlatformException {

} on Exception catch (e) {
if (e.code == 'ERROR_INVALID_CREDENTIAL')
// do whatever

} on Error catch (e) {
if (e.code == 'ERROR_INVALID_CREDENTIAL')
// do whatever
Я также только что пытался что-нибудь поймать, делая что-то вроде

Код: Выделить всё

} on Error catch (_) } { or } on Exception catch (_) {
Честно говоря, я очень озадачен тем, почему я вообще не могу обнаружить ошибки. Это заставляет меня думать, что мое концептуальное понимание try/on/catch неверно, но когда я смотрю документацию о том, как его синтаксически структурировать, все правильно. Это потому, что сообщение выдается внутри импортированного пакета? Однако я ссылаюсь на точный код, который они предоставляют, когда я навожу курсор на исключение платформы, выданное из этого файла messages.pigeon.dart. И даже если я использовал неправильный код исключения или ошибки, разве я не должен быть в состоянии уловить буквально любую возникающую ошибку? Или это потому, что это ошибка не Flutter, а Firebase?
Я очень надеялся, что смогу пройти эту часть, не задавая индивидуальный вопрос, но, к сожалению, всю документацию я Я видел по этой проблеме просто указания на отключение защиты, и я не хочу этого делать. Я хочу, чтобы приложение было защищено от известных атак, и я хотел преодолеть эту проблему сам, но я просто не могу видеть еще одно чертово исключение платформы!
Любая помощь или информация, которую вы можете получить могли бы предоставить, было бы здорово! Если вам нужна дополнительная информация, дайте мне знать.

Подробнее здесь: https://stackoverflow.com/questions/791 ... rmexceptio
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»