class DeviseController

All Devise controllers are inherited from here.

def _prefixes #:nodoc:

:nodoc:
itself. Changing its visibility may break other gems.
This method should be public as it is in ActionPack

loaded before even having a request object.
Action Controller tests that forces _prefixes to be
Notice we need to check for the request due to a bug in
Override prefixes to consider the scoped view.
def _prefixes #:nodoc:
  @_prefixes ||= if self.class.scoped_views? && request && devise_mapping
    ["#{devise_mapping.scoped_path}/#{controller_name}"] + super
  else
    super
  end
end

def assert_is_devise_resource! #:nodoc:

:nodoc:
Checks whether it's a devise mapped resource or not.
def assert_is_devise_resource! #:nodoc:
  unknown_action! <<-MESSAGE unless devise_mapping
uld not find devise mapping for path #{request.fullpath.inspect}.
is may happen for two reasons:
 You forgot to wrap your route inside the scope block. For example:
devise_scope :user do
  get "/some/route" => "some_devise_controller"
end
 You are testing a Devise controller bypassing the router.
 If so, you can explicitly tell Devise which mapping to use:
 @request.env["devise.mapping"] = Devise.mappings[:user]
SSAGE
end

def clean_up_passwords(object)

def clean_up_passwords(object)
  object.clean_up_passwords if object.respond_to?(:clean_up_passwords)
end

def devise_i18n_options(options)

def devise_i18n_options(options)
  options
end

def devise_mapping

Attempt to find the mapped route for devise based on request path
def devise_mapping
  @devise_mapping ||= request.env["devise.mapping"]
end

def find_message(kind, options = {})

Get message for given
def find_message(kind, options = {})
  options[:scope] ||= translation_scope
  options[:default] = Array(options[:default]).unshift(kind.to_sym)
  options[:resource_name] = resource_name
  options = devise_i18n_options(options)
  I18n.t("#{options[:resource_name]}.#{kind}", **options)
end

def navigational_formats

Returns real navigational formats which are supported by Rails
def navigational_formats
  @navigational_formats ||= Devise.navigational_formats.select { |format| Mime::EXTENSION_LOOKUP[format.to_s] }
end

def require_no_authentication

before_action :require_no_authentication, only: :new
Example:

Helper for use in before_actions where no authentication is required.
def require_no_authentication
  assert_is_devise_resource!
  return unless is_navigational_format?
  no_input = devise_mapping.no_input_strategies
  authenticated = if no_input.present?
    args = no_input.dup.push scope: resource_name
    warden.authenticate?(*args)
  else
    warden.authenticated?(resource_name)
  end
  if authenticated && resource = warden.user(resource_name)
    set_flash_message(:alert, 'already_authenticated', scope: 'devise.failure')
    redirect_to after_sign_in_path_for(resource)
  end
end

def resource

Gets the actual resource stored in the instance variable
def resource
  instance_variable_get(:"@#{resource_name}")
end

def resource=(new_resource)

Sets the resource creating an instance variable
def resource=(new_resource)
  instance_variable_set(:"@#{resource_name}", new_resource)
end

def resource_class

Proxy to devise map class
def resource_class
  devise_mapping.to
end

def resource_name

Proxy to devise map name
def resource_name
  devise_mapping.name
end

def resource_params

def resource_params
  params.fetch(resource_name, {})
end

def respond_with_navigational(*args, &block)

def respond_with_navigational(*args, &block)
  respond_with(*args) do |format|
    format.any(*navigational_formats, &block)
  end
end

def set_flash_message(key, kind, options = {})

available.
Please refer to README or en.yml locale file to check what messages are

#resource_scope_messages
user:
#default_scope_messages - only if resource_scope is not found
passwords:
devise:
en:

Example (i18n locale file):
next action).
the flash message will be available to the current action instead of the
value to populate the flash.now hash in lieu of the default flash hash (so
found we look to the default scope. Set the "now" options key to a true
to set up your messages using specific resource scope, and if no message is
Sets the flash message with :key, using I18n. By default you are able
def set_flash_message(key, kind, options = {})
  message = find_message(kind, options)
  if options[:now]
    flash.now[key] = message if message.present?
  else
    flash[key] = message if message.present?
  end
end

def set_flash_message!(key, kind, options = {})

Sets flash message if is_flashing_format? equals true
def set_flash_message!(key, kind, options = {})
  if is_flashing_format?
    set_flash_message(key, kind, options)
  end
end

def set_minimum_password_length

Sets minimum password length to show to user
def set_minimum_password_length
  if devise_mapping.validatable?
    @minimum_password_length = resource_class.password_length.min
  end
end

def signed_in_resource

Returns a signed in resource from session (if one exists)
def signed_in_resource
  warden.authenticate(scope: resource_name)
end

def successfully_sent?(resource)

and instructions were sent.
If we are in paranoid mode, we always act as if the resource was valid
Helper for use after calling send_*_instructions methods on a resource.
def successfully_sent?(resource)
  notice = if Devise.paranoid
    resource.errors.clear
    :send_paranoid_instructions
  elsif resource.errors.empty?
    :send_instructions
  end
  if notice
    set_flash_message! :notice, notice
    true
  end
end

def translation_scope

existing translations.
method so that other controllers inheriting from them would use
Controllers inheriting DeviseController are advised to override this
def translation_scope
  "devise.#{controller_name}"
end

def unknown_action!(msg)

def unknown_action!(msg)
  logger.debug "[Devise] #{msg}" if logger
  raise AbstractController::ActionNotFound, msg
end