Module: Sorcery::Model::Submodules::ResetPassword::InstanceMethods

Defined in:
lib/sorcery/model/submodules/reset_password.rb

Instance Method Summary collapse

Instance Method Details

#change_password(new_password, raise_on_failure: false) ⇒ Object

Clears token and tries to update the new password for the user.



127
128
129
130
131
# File 'lib/sorcery/model/submodules/reset_password.rb', line 127

def change_password(new_password, raise_on_failure: false)
  clear_reset_password_token
  send(:"#{sorcery_config.password_attribute_name}=", new_password)
  sorcery_adapter.save raise_on_failure: raise_on_failure
end

#change_password!(new_password) ⇒ Object

Raises:

  • (ArgumentError)


133
134
135
136
137
# File 'lib/sorcery/model/submodules/reset_password.rb', line 133

def change_password!(new_password)
  raise ArgumentError, 'Blank password passed to change_password!' if new_password.blank?

  change_password(new_password, raise_on_failure: true)
end

#deliver_reset_password_instructions!Object

Generates a reset code with expiration and sends an email to the user.



99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/sorcery/model/submodules/reset_password.rb', line 99

def deliver_reset_password_instructions!
  mail = false
  config = sorcery_config
  # hammering protection
  return false if config.reset_password_time_between_emails.present? && send(config.reset_password_email_sent_at_attribute_name) && send(config.reset_password_email_sent_at_attribute_name) > config.reset_password_time_between_emails.seconds.ago.utc

  self.class.sorcery_adapter.transaction do
    generate_reset_password_token!
    mail = send_reset_password_email! unless config.reset_password_mailer_disabled
  end
  mail
end

#generate_reset_password_token!Object

Generates a reset code with expiration



89
90
91
92
93
94
95
96
# File 'lib/sorcery/model/submodules/reset_password.rb', line 89

def generate_reset_password_token!
  config = sorcery_config
  attributes = { config.reset_password_token_attribute_name => TemporaryToken.generate_random_token,
                 config.reset_password_email_sent_at_attribute_name => Time.now.in_time_zone }
  attributes[config.reset_password_token_expires_at_attribute_name] = Time.now.in_time_zone + config.reset_password_expiration_period if config.reset_password_expiration_period

  sorcery_adapter.update_attributes(attributes)
end

#increment_password_reset_page_access_counterObject

Increment access_count_to_reset_password_page attribute. For example, access_count_to_reset_password_page attribute is over 1, which means the user doesn’t have a right to access.



115
116
117
# File 'lib/sorcery/model/submodules/reset_password.rb', line 115

def increment_password_reset_page_access_counter
  sorcery_adapter.increment(sorcery_config.reset_password_page_access_count_attribute_name)
end

#reset_password_reset_page_access_counterObject

Reset access_count_to_reset_password_page attribute into 0. This is expected to be used after sending an instruction email.



121
122
123
124
# File 'lib/sorcery/model/submodules/reset_password.rb', line 121

def reset_password_reset_page_access_counter
  send(:"#{sorcery_config.reset_password_page_access_count_attribute_name}=", 0)
  sorcery_adapter.save
end