module SmartSMS::HasSmsVerification::ClassMethods::InstanceMethods

Instance methods

Public Instance Methods

deliver(text = SmartSMS::VerificationCode.random) click to toggle source

发送短信至手机

# File lib/smart_sms/has_sms_verification.rb, line 117
def deliver(text = SmartSMS::VerificationCode.random)
  result = SmartSMS.deliver send(self.class.sms_mobile_column), text
  if result['code'] == 0
    sms = SmartSMS.find_by_sid(result['result']['sid'])['sms']
    save_or_return_message sms, text
  else
    errors.add :deliver, result
    false
  end
end
deliver_fake_sms(text = SmartSMS::VerificationCode.random) click to toggle source
# File lib/smart_sms/has_sms_verification.rb, line 128
def deliver_fake_sms(text = SmartSMS::VerificationCode.random)
  mobile = send(self.class.sms_mobile_column)
  company = SmartSMS.config.company
  sms = SmartSMS::FakeSMS.build_fake_sms mobile, text, company
  save_or_return_message sms, text
end
latest_message() click to toggle source

获取最新的一条有效短信记录

# File lib/smart_sms/has_sms_verification.rb, line 97
def latest_message
  end_time = Time.now
  start_time = end_time - SmartSMS.config.expires_in
  if SmartSMS.config.store_sms_in_local
    send(self.class.messages_association_name)
      .where('send_time >= ? and send_time <= ?', start_time, end_time)
      .last
  else
    result = SmartSMS.find(
      start_time: start_time,
      end_time: end_time,
      mobile: send(self.class.sms_mobile_column),
      page_size: 1
    )
    result['sms'].first
  end
end
verified?() click to toggle source

判断是否已经验证成功

# File lib/smart_sms/has_sms_verification.rb, line 87
def verified?
  verified_at.present?
end
verified_at() click to toggle source
# File lib/smart_sms/has_sms_verification.rb, line 91
def verified_at
  self[self.class.sms_verification_column]
end
verify(code) click to toggle source

安全verify方法, 用于校验短信验证码是否正确, 返回: true 或 false

# File lib/smart_sms/has_sms_verification.rb, line 75
def verify(code)
  sms = latest_message
  return false if sms.blank?
  if SmartSMS.config.store_sms_in_local
    sms.code == code.to_s
  else
    sms['text'].gsub(self.class.verify_regexp, '') == code.to_s
  end
end
verify!(code) click to toggle source

非安全verify!方法, 验证成功后会存储成功的结果到数据表中

# File lib/smart_sms/has_sms_verification.rb, line 65
def verify!(code)
  result = verify code
  if result
    send("#{self.class.sms_verification_column}=", Time.now)
    save(validate: false)
  end
end

Private Instance Methods

save_or_return_message(sms, text) click to toggle source
# File lib/smart_sms/has_sms_verification.rb, line 137
def save_or_return_message(sms, text)
  if SmartSMS.config.store_sms_in_local
    message = send(self.class.messages_association_name).build sms
    message.code = text
    message.save
  else
    sms
  end
end