lib/models/phone.rb in devise_phone-0.0.1661 vs lib/models/phone.rb in devise_phone-0.0.1662
- old
+ new
@@ -29,175 +29,138 @@
module Phone
extend ActiveSupport::Concern
included do
before_create :set_unverified_phone_attributes, :if => :phone_verification_needed?
- after_create :generate_verification_code_and_send_sms, :if => :phone_verification_needed?
+ after_create :private_generate_verification_code_and_send_sms, :if => :phone_verification_needed?
+ # before_save :remember_old_phone_number
+ before_save :private_generate_verification_code_and_send_sms, :if => :phone_number_changed?
end
-
-
- # # Confirm a user by setting it's sms_confirmed_at to actual time. If the user
- # # is already confirmed, add en error to email field
- # def confirm_sms!
- # unless_sms_confirmed do
- # self.sms_confirmation_token = nil
- # self.sms_confirmed_at = Time.now
- # save(:validate => false)
- # end
- # end
-
- # # Verifies whether a user is sms-confirmed or not
- # def confirmed_sms?
- # !!sms_confirmed_at
- # end
-
- # Send confirmation token by sms
def generate_verification_code_and_send_sms
- puts "in the public method"
- if(self.phone_number?)
- puts "generating code"
- update!(phone_verification_code: generate_phone_verification_code)
- send_sms_verification_code
- else
- self.errors.add(:phone_verification_code, :no_phone_associated)
- false
+ if(phone_verification_needed?)
+ private_generate_verification_code_and_send_sms
+ end
+ self.save!
end
- end
def verify_phone_number_with_code_entered(code_entered)
- if (code_entered == self.phone_verification_code)
- mark_phone_as_verified!
- true
- else
- self.errors.add(:phone_verification_code, :wrong_code_entered)
- false
+ if phone_verification_needed? && (code_entered == self.phone_verification_code)
+ mark_phone_as_verified!
end
end
+ private
- # # Resend sms confirmation token. This method does not need to generate a new token.
- # def resend_sms_token
- # unless_sms_confirmed { send_sms_token }
- # end
+ # def remember_old_phone_number
+ # puts "phone number changed?: "
+ # puts phone_number_changed?
+ # if phone_number.present?
+ # puts "Old phone number before save:"
+ # puts phone_number
+ # @old_phone_number = phone_number
+ # else
+ # @old_phone_number = nil
+ # end
+ # end
- # Overwrites active? from Devise::Models::Activatable for sms confirmation
- # by verifying whether a user is active to sign in or not. If the user
- # is already confirmed, it should never be blocked. Otherwise we need to
- # calculate if the confirm time has not expired for this user.
+ # def phone_number_changed?
+ # puts "Old phone number after save:"
+ # puts @old_phone_number
+ # if @old_phone_number.present? && phone_number.present?
+ # puts "condition 1"
+ # @old_phone_number != phone_number
+ # elsif @old_phone_number.blank? && phone_number.present?
+ # puts "condition 2"
+ # true
+ # else
+ # puts "condition 3"
+ # set_unverified_phone_attributes
+ # false
+ # end
+ # end
- # def active?
- # !sms_confirmation_required? || confirmed_sms? || confirmation_sms_period_valid?
- # end
+ def private_generate_verification_code_and_send_sms
+ self.phone_verification_code = generate_phone_verification_code
+ set_unverified_phone_attributes
+ if phone_number.present?
+ send_sms_verification_code
+ end
+ end
- # # The message to be shown if the account is inactive.
- # def inactive_message
- # !confirmed_sms? ? I18n.t(:"devise.sms_activations.unconfirmed_sms") : super
- # end
- # # If you don't want confirmation to be sent on create, neither a code
- # # to be generated, call skip_sms_confirmation!
- # def skip_sms_confirmation!
- # self.sms_confirmed_at = Time.now
- # end
-
- private
-
def mark_phone_as_verified!
update!(phone_number_verified: true,
phone_verification_code: nil,
phone_verification_code_sent_at: nil,
phone_verified_at: DateTime.now)
end
- # Callback to overwrite if an sms confirmation is required or not.
+ # check if phone verification is needed and set errors here
def phone_verification_needed?
- phone_number.present? && !phone_number_verified
+ if phone_number.blank?
+ self.errors.add(:phone_verification_code, :empty_phone_number_field)
+ false
+ elsif phone_number_verified
+ self.errors.add(:phone_verification_code, :phone_verification_not_needed)
+ false
+ else
+ true
+ end
end
- # Generates a new random token for confirmation, and stores the time
- # this token is being generated
+ # set attributes to user indicating the phone number is unverified
def set_unverified_phone_attributes
-
self.phone_number_verified = false
self.phone_verification_code_sent_at = DateTime.now
self.phone_verified_at = nil
# removes all white spaces, hyphens, and parenthesis
- self.phone_number.gsub!(/[\s\-\(\)]+/, '')
+ if self.phone_number
+ self.phone_number.gsub!(/[\s\-\(\)]+/, '')
+ end
end
+ # return 6 digits random code a-z,0-9
def generate_phone_verification_code
verification_code = SecureRandom.hex(3)
verification_code
end
+ # sends a message to number indicated in the secrets.yml
def send_sms_verification_code
- puts "in the private method"
-
number_to_send_to = self.phone_number
verification_code = self.phone_verification_code
- twilio_sid = "ACd35391c08cde7926e2295d1812ada918"
- twilio_token = "44d79a36adb3d54cc15711d94d149119"
- twilio_phone_number = "6502810746"
+ twilio_sid = Rails.application.secrets.twilio_sid
+ twilio_token = Rails.application.secrets.twilio_token
+ twilio_phone_number = Rails.application.secrets.twilio_phone_number
@twilio_client = Twilio::REST::Client.new twilio_sid, twilio_token
@twilio_client.account.sms.messages.create(
:from => "+1#{twilio_phone_number}",
:to => number_to_send_to,
:body => "Hi! This is MathCrunch. Your verification code is #{verification_code}"
)
end
+ #end of private methods
- module ClassMethods
+ # module ClassMethods # 'public' methods for class user
- def generate_verification_code_and_send_sms
- puts "in the public method"
- if(self.phone_number?)
- puts "generating code"
- update!(phone_verification_code: generate_phone_verification_code)
- send_sms_verification_code
- else
- self.errors.add(:phone_verification_code, :no_phone_associated)
- false
- end
- end
+ # def generate_verification_code_and_send_sms
+ # if(phone_verification_needed?)
+ # private_generate_verification_code_and_send_sms
+ # end
+ # self.save!
+ # end
- def verify_phone_number_with_code_entered(code_entered)
- if (code_entered == self.phone_verification_code)
- mark_phone_as_verified!
- true
- else
- self.errors.add(:phone_verification_code, :wrong_code_entered)
- false
- end
- end
+ # def verify_phone_number_with_code_entered(code_entered)
+ # if phone_verification_needed? && (code_entered == self.phone_verification_code)
+ # mark_phone_as_verified!
+ # end
+ # end
- end
+ # end #end of ClassMethods
-
-
- # def mark_phone_as_verified!
- # update!(phone_number_verified: true,
- # phone_verification_code: nil,
- # phone_verification_code_sent_at: nil,
- # phone_verified_at: DateTime.now)
- # end
-
- # def verify_phone_number_with_code_entered(code_entered)
- # if self.phone_verification_code == code_entered
- # mark_phone_as_verified!
- # end
- # end
-
- # def set_unverified_phone_attributes_and_send_verification_code
- # self.set_verified_phone_attributes
- # if self.save!
- # send_sms_for_verification_code
- # end
- # end
-
- # end
end
end
end