Нам нужно больше информации для полного ответа (если возможно).
Для начала нужен смс провайдер (вы, кажется, выбрали twilio). Затем вам нужен код, чтобы иметь возможность отправлять смс с помощью этого провайдера. https://www.twilio.com/blog/2012/02/adding-twilio-sms-messaging-to-your-rails-app.html
Тогда вам нужна логика. Это один из способов сделать это. Я предполагаю, что вы используете базу данных с учетными данными для входа.
Добавьте новую таблицу с 3 столбцами (не помешает добавить еще один для первичного ключа), один столбец для user_id, один столбец для кода, следующий для даты.
Затем, когда пользователь хочет войти в систему, создайте код (числовой или нет) и добавьте код в таблицу с текущей датой и user_id, затем отправьте смс на номер телефона пользователя и перенаправьте пользователя на страницу, где он может ввести код . Когда он вводит код, вы сравниваете его с вашей строкой в базе данных и проверяете его. Наличие даты позволит легко добавить тайм-аут кода, чтобы пользователь должен был ввести код через 60 секунд или через какое время вы бы предпочитать. Вам нужно будет отправить идентификатор на страницу, где пользователь вводит смс-код, чтобы вы знали, какой это пользователь, и это, конечно, следует проверить по таблице. Использование этого подхода упрощает отслеживание всех попыток, предпринятых пользователем.
Советом было бы добавить ограничение на количество смс в день/час, которое может использовать пользователь. Тогда он будет заблокирован до конца дня, и завтра ему придется повторить попытку. В противном случае кто-то с пользователем/паролем может отправить тысячи запросов и заставить вас отправить такое количество смс, что будет стоить вам больших денег. Это, конечно, зависит от того, дебетуете ли вы смс на счет пользователя каким-то образом.. Просто хотел упомянуть об этом..
09.06.2016