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