Підтвердження номера телефону, використовуючи Ruby on rails і Twilio

Як-то раз переді мною стояло завдання зробити підтвердження номера телефону. І так як у мене зовсім немає зірочок на гітхабі (і інвайту на хабре), було прийнято рішення зробити гем.

image

Як смс-шлюзу був вибраний сервіс Twilio, бо він зручний і недорогий. Витративши на це кілька годин, вийшов, як на мене, вельми зручний гем.

Щоб встановити його, треба додати в гемфайл:

gem "twilio_phone_verification"

Після чого виконати команду:

bundle install

І

rails g twilio_phone_verification:install [USER_CLASS]

USER_CLASS це клас, для якого треба додати перевірку телефону. Note:треба, щоб у даного класу було поле name, щоб він зміг відправить смску «Hello, {{name}} ...». Це створить 2 файлу:

config/initializers/twilio_phone_verification.rb конфіг файл, де треба ввести ключі і номер телефону з Twilio

TwilioPhoneVerification.configure do |config|
config.account_sid = ENV.fetch("TWILIO_ACCOUNT_SID") # Paste account id here
config.auth_token = ENV.fetch("TWILIO_AUTH_TOKEN") # Paste your twilio auth token here
config.from = ENV.fetch("TWILIO_NUMBER") # Paste your twilio number here
end

і db/migrate/000000000000000_add_phone_to_users.rb міграція, яка створить необхідні поля:

class AddPhoneToUsers < ActiveRecord::Migration[5.0]
def self.up
add_column :users, :phone :string
add_column :users, :phone_confirmation_token, :string
add_column :users, :phone_confirmed_at, :datetime
add_column :users, :phone_confirmation_sent_at, :datetime
add_index :users, :phone, unique: true
end

def self.down
remove_column :users, :phone
remove_column :users, :phone_confirmation_token
remove_column :users, :phone_confirmed_at
remove_column :users, :phone_confirmation_sent_at
end
end

Після чого виконати команду:

rails db:migrate # rails 5
rake db:migrate # rails < 5

Додати модель консерн, щоб додалися потрібні методи:

class User < ActiveRecord::Base
include TwilioPhoneVerification::Phonable
end

Це додасть 4 основних методи: phone_confirmed? повертає true або false, залежно від того, підтверджений телефон.

send_phone_confirmation генерує код і відправляє sms. Повертає {success: true}, якщо смска вирушила, або false, якщо не вирушила. Кожен раз генерується нова смска. Код може бути відправлений тільки 1 раз в хвилину.

confirm_phone_by_code(code) повертає true і веріфіцірует номер телефону, якщо код вірний, інакше false.

confirm_phone веріфіцірует номер телефону без перевірки коду.

Якщо метод повертає false, то помилка додається до .errors.

Також є 2 таймстампа:

phone_confirmed_at коли був підтверджений телефон
phone_confirmation_sent_at коли була відправлена остання смска

» Github repo

На цьому все. Дякую за увагу.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.