module Devise::Models::Phone

Public Instance Methods

generate_verification_code_and_send_sms(phone_number) click to toggle source
# File lib/models/phone.rb, line 15
def generate_verification_code_and_send_sms(phone_number)
  if(phone_verification_needed?)
    private_generate_verification_code_and_send_sms(phone_number)
  else
    "Phone number #{phone_number} is already verified"
  end
end
match_a_verification_code_with_code_entered(code_entered) click to toggle source
# File lib/models/phone.rb, line 44
def match_a_verification_code_with_code_entered(code_entered)
  if phone_verification_needed?
    if code_entered == self.phone_verification_code
      mark_phone_as_verified
      nil
    else
      "Code entered does not match phone verification code in the database"
    end
  else
    "Phone number #{self.phone_number} is already verified"
  end
end
use_own_verification_code_and_send_sms(phone_number) click to toggle source
# File lib/models/phone.rb, line 23
def use_own_verification_code_and_send_sms(phone_number)
  if(phone_verification_needed?)
    private_use_own_verification_code_and_send_sms(phone_number)
  else
    "Phone number #{phone_number} is already verified"
  end
end
verify_phone_number_with_code_entered(code_entered) click to toggle source
# File lib/models/phone.rb, line 31
def verify_phone_number_with_code_entered(code_entered)
  if phone_verification_needed?
    if code_entered == self.phone_verification_code
      mark_phone_as_verified
      nil
    else
      "Code entered does not match phone verification code in the database"
    end
  else
    "Phone number #{self.phone_number} is already verified"
  end
end

Private Instance Methods

generate_phone_verification_code() click to toggle source

return 4 digits random code 0-9

# File lib/models/phone.rb, line 116
def generate_phone_verification_code
  verification_code = SecureRandom.random_number(10 ** 4).to_s.rjust(4,'0')
  verification_code
end
mark_phone_as_verified() click to toggle source
# File lib/models/phone.rb, line 75
def mark_phone_as_verified
  self.phone_number_verified = true
  self.phone_verification_code = nil
  self.phone_verification_code_sent_at = nil
  self.phone_verified_at = DateTime.now
end
phone_verification_needed?() click to toggle source

check if phone verification is needed and set errors here

# File lib/models/phone.rb, line 83
def phone_verification_needed?
  if phone_number_verified
    false
  else
    true
  end
end
private_generate_verification_code_and_send_sms(phone_number) click to toggle source
# File lib/models/phone.rb, line 59
def private_generate_verification_code_and_send_sms(phone_number)
    self.phone_verification_code = generate_phone_verification_code
    set_unverified_phone_attributes
    # if phone_number.present?
    send_sms_verification_code(phone_number)
    # end
end
private_use_own_verification_code_and_send_sms(phone_number) click to toggle source
# File lib/models/phone.rb, line 67
def private_use_own_verification_code_and_send_sms(phone_number)
    set_unverified_phone_attributes
    # if phone_number.present?
    send_sms_verification_code(phone_number)
    # end
end
regenerate_phone_verification_needed?() click to toggle source
# File lib/models/phone.rb, line 91
def regenerate_phone_verification_needed?
  # if phone_number.present?
    if phone_number_changed?
      true
    else
      false
    end
    # self.errors.add(:phone_verification_code, :empty_phone_number_field)
    # false
  # else
    # false
  # end
end
send_sms_verification_code(phone_number) click to toggle source

sends a message to number indicated in the secrets.yml

# File lib/models/phone.rb, line 122
def send_sms_verification_code(phone_number)
    number_to_send_to = phone_number.gsub!(/[\s\-\(\)]*/, '')
    verification_code = self.phone_verification_code

    twilio_sid = Rails.application.config.twilio[:sid]
    twilio_token = Rails.application.config.twilio[:token]
    twilio_phone_number = Rails.application.config.twilio[:phone_number]
    twilio_message_body = I18n.t("devise.phone.message_body", :verification_code => verification_code)

    begin
      @twilio_client = Twilio::REST::Client.new twilio_sid, twilio_token
      @twilio_client.account.messages.create(
        :from => "+1#{twilio_phone_number}",
        :to => number_to_send_to,
        :body => twilio_message_body
      )
      self.phone_verification_code_sent_at = DateTime.now
      nil #return nil indicating sms sent successfully
    rescue Twilio::REST::RequestError => e
      e.message
    end

end
set_unverified_phone_attributes() click to toggle source

set attributes to user indicating the phone number is unverified

# File lib/models/phone.rb, line 106
def set_unverified_phone_attributes
  self.phone_number_verified = false
  self.phone_verified_at = nil
  # removes all white spaces, hyphens, and parenthesis
  # if self.phone_number
  #   self.phone_number.gsub!(/[\s\-\(\)]+/, '')
  # end
end