Выделите и встряхните текстовые поля при вводе неправильных учетных данных

В этом руководстве мы создадим код, чтобы посмотреть количество попыток входа в систему только для поля пароля. Было бы лучше, если бы вы не сообщили пользователю, в каком поле указаны неверные данные. Вместо этого выделите поля для имени пользователя / электронной почты и пароля - это затруднит взлом учетной записи. Конечно, есть и другие меры безопасности, такие как двухфакторная аутентификация, но я оставлю их для другого урока.

Простой интерфейс

Мы начнем с создания структуры представления с текстом для входа в VStack.

Объявите переменные имени пользователя / электронной почты и пароля для хранения введенных пользователем значений, затем создайте и добавьте в VStack поля имени пользователя / электронной почты и пароля. Сделайте поле Password SecureField.

Вы можете использовать некоторые символы SF для настройки своего поля. Ниже у меня есть символ person для имени пользователя и lock для пароля. Вставьте изображения внутрь HStacks с соответствующим TextField.

Добавьте забытый пароль, кнопки входа и регистрации в один и тот же VStack для завершения пользовательского интерфейса, как показано ниже:

Теперь у нас настроены все элементы пользовательского интерфейса.

Анимация

Затем мы создаем эффект встряхивания, используя GeometryEffect. Отрегулируйте переменную по своему усмотрению. travelDistance повлияет на то, как далеко TextField будет перемещаться по горизонтали. numOfShakes - это количество раз, когда TextField встряхнется. animatableData - количество попыток, взятых из LoginView.

Объявите переменную для подсчета количества недействительных попыток входа в систему. Добавьте наложение, чтобы создать границу к HStacks, который включает наш TextField, затем добавьте модификатор к тому же HStack, который принимает наш ShakeEffect.

@State var invalidAttempts = 0

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

Все сделано! Затем вы можете ограничить количество неудачных попыток входа в систему, чтобы пользователи не злоупотребляли вашим сервером.