Проверка номеров телефонов пользователей в Ruby on Rails с помощью API верификации Authy

Автор: | 11.08.2026

Если вам когда-либо потребуется связаться с пользователями вашего приложения по телефону, хорошей практикой будет убедиться, что введённый ими номер действительно принадлежит им. Давайте разберёмся, как проверять номера телефонов в приложении на Rails 5 с использованием API верификации телефонов Authy.

Для работы с этим материалом вам понадобятся:

— Аккаунт Twilio

— Приложение Authy, которое можно создать в консоли Twilio — вам потребуется API-ключ

— Установленные Ruby и Rails. Я использую последнюю версию Rails 5.1.2 и Ruby 2.4.1

Создайте новое Rails-приложение для этого проекта:

Нам нужно добавить несколько гемов, которые мы будем использовать в проекте. Откройте `Gemfile` и добавьте `authy` и `envyable`. Authy будет использоваться для верификации телефона, а envyable — для управления переменными окружения.

Установите гемы, затем инициализируйте envyable из командной строки:

Откройте `config/env.yml` и добавьте ваш API-ключ приложения Authy:

Теперь инициализируйте сам Authy, создав файл `config/initializers/authy.rb` и добавив в него следующий код:

На этом вся необходимая инициализация завершена, и мы можем приступить к созданию приложения.

Процесс верификации довольно прост:

— Пользователь вводит три блока информации:

— Номер телефона

— Код страны

— Способ верификации: голосовой звонок или SMS

— Наше приложение отправляет запрос в API для начала верификации

— Пользователь получает звонок или SMS с четырёхзначным кодом

— Затем он вводит этот код в форму в приложении

— Код отправляется в API вместе с номером телефона и кодом страны для проверки

— Если код верный, номер телефона пользователя считается подтверждённым

Нам понадобится контроллер, который будет отображать необходимые представления и выполнять работу по инициализации верификации и проверке номера телефона. Создайте контроллер с помощью команды:

Это создаст пять действий и пять представлений. Нам не нужны представления create и verify, так что их можно удалить. Также будут сгенерированы маршруты. Откройте `config/routes.rb`, удалите пять новых маршрутов и замените их на:

Это создаст пять маршрутов, которые можно посмотреть, выполнив команду `rails routes` в командной строке. Они выглядят так:

Действие `new` должно отображать пользователю форму, в которую он введёт номер телефона, код страны и выберет способ верификации: SMS или голосовой звонок.

Чтобы создать список кодов стран и интерфейс для поиска по странам, подключите JavaScript-хелперы форм Authy. Добавьте в `` файла `app/views/layouts/application.html.erb` следующее:

Теперь в файле `app/views/phone_verifications/new.html.erb` замените сгенерированный код на следующий:

Этот код настраивает форму для отправки трёх полей. Использование ID `»authy-countries»` означает, что `select_tag` будет обработан JavaScript-кодом Authy и превращён в список стран с возможностью поиска.

Также мы используем `telephone_field_tag` для создания HTML-поля ввода с типом `»tel»`, чтобы мобильные устройства показывали оптимизированную клавиатуру для ввода телефонных номеров.

Запустите сервер:

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

В файле `app/controllers/phone_verifications_controller.rb` замените пустой метод `create` следующим кодом:

Ключевая часть здесь — вызов `Authy::PhoneVerification.start`. Мы передаём параметры, собранные от пользователя, включая способ связи, номер телефона и код страны. Если ответ успешен, процесс верификации начнётся, иначе возникнет ошибка.

Мы уже добавили код для отображения ошибок, если что-то пойдёт не так. Эти строки в представлении обрабатывают это:

Обратите внимание, что мы сохраняем номер телефона и код страны в сессии, чтобы использовать их позже. В полном приложении эти данные сохранялись бы в модели пользователя или записи номера телефона в базе данных, а в сессии хранился бы только ID записи.

Теперь пользователю нужно ввести четырёхзначный код, который придёт в процессе верификации. Добавьте следующий код в `app/views/phone_verifications/challenge.html.erb`:

На этот раз ключевая часть — это запрос к `Authy::PhoneVerification.check`, куда передаются номер телефона и код страны, сохранённые ранее, а также код, введённый пользователем. Если ответ успешен, верификация прошла успешно, и мы можем очистить сессию и перенаправить пользователя на страницу успеха. В реальном приложении вы, скорее всего, отметили бы, что пользователь или запись номера телефона подтверждены, и сохранили бы это в базе данных.

Если код был неверным, мы просто снова покажем представление challenge, чтобы пользователь мог повторить попытку, если допустил ошибку.

Чтобы завершить работу, добавьте сообщение об успехе в `app/views/phone_verifications/success.html.erb`:

Перейдите по адресу http://localhost:3000/phone_verifications/new и введите корректные данные. Когда вы получите звонок или SMS, введите код верификации во вторую форму, и вы увидите сообщение об успешной проверке вашего телефона.

Вот так можно начать работу с API верификации телефонов Authy в Rails 5. Полный код этой статьи можно посмотреть на GitHub. Конечно, это приложение далеко от завершения — предстоит ещё много работы. Например:

— Сохранять номер телефона и статус его верификации в модели пользователя в базе данных

— Лучше обрабатывать ошибки, давая пользователям возможность повторно отправить запрос или проверить и обновить номер телефона

Если у вас есть вопросы или комментарии, не стесняйтесь обращаться. Оставьте комментарий ниже или напишите мне в Twitter.