class Devise::PasswordsController

def after_sending_reset_password_instructions_path_for(resource_name)

The path used after sending reset password instructions
def after_sending_reset_password_instructions_path_for(resource_name)
  new_session_path(resource_name)
end

def assert_reset_token_passed

Check if a reset_password_token is provided in the request
def assert_reset_token_passed
  if params[:reset_password_token].blank?
    set_flash_message(:error, :no_token)
    redirect_to new_session_path(resource_name)
  end
end

def create

POST /resource/password
def create
  self.resource = resource_class.send_reset_password_instructions(resource_params)
  if successfully_sent?(resource)
    respond_with({}, :location => after_sending_reset_password_instructions_path_for(resource_name))
  else
    respond_with(resource)
  end
end

def edit

GET /resource/password/edit?reset_password_token=abcdef
def edit
  self.resource = resource_class.new
  resource.reset_password_token = params[:reset_password_token]
end

def new

GET /resource/password/new
def new
  build_resource({})
end

def unlockable?(resource)

allows to unlock resource on password reset
Check if proper Lockable module methods are present & unlock strategy
def unlockable?(resource)
  resource.respond_to?(:unlock_access!) &&
    resource.respond_to?(:unlock_strategy_enabled?) &&
    resource.unlock_strategy_enabled?(:email)
end

def update

PUT /resource/password
def update
  self.resource = resource_class.reset_password_by_token(resource_params)
  if resource.errors.empty?
    resource.unlock_access! if unlockable?(resource)
    flash_message = resource.active_for_authentication? ? :updated : :updated_not_active
    set_flash_message(:notice, flash_message) if is_navigational_format?
    sign_in(resource_name, resource)
    respond_with resource, :location => after_sign_in_path_for(resource)
  else
    respond_with resource
  end
end