module Devise::Models::Recoverable::ClassMethods

def reset_password_by_token(attributes={})

Attributes must contain reset_password_token, password and confirmation
containing an error in reset_password_token attribute.
try saving the record. If not user is found, returns a new user
password. If a user is found and token is still valid, reset its password and automatically
Attempt to find a user by its reset_password_token to reset its
def reset_password_by_token(attributes={})
  recoverable = find_or_initialize_with_error_by(:reset_password_token, attributes[:reset_password_token])
  if recoverable.persisted?
    if recoverable.reset_password_period_valid?
      recoverable.reset_password!(attributes[:password], attributes[:password_confirmation])
    else
      recoverable.errors.add(:reset_password_token, :expired)
    end
  end
  recoverable
end