module Devise::Controllers::Helpers

Those helpers are convenience methods added to ApplicationController.

Public Instance Methods

after_sign_in_path_for(resource_or_scope) click to toggle source

The default url to be used after signing in. This is used by all Devise controllers and you can overwrite it in your ApplicationController to provide a custom hook for a custom resource.

By default, it first tries to find a valid resource_return_to key in the session, then it fallbacks to resource_root_path, otherwise it uses the root path. For a user scope, you can define the default url in the following way:

get '/users' => 'users#index', as: :user_root # creates user_root_path

namespace :user do
  root 'users#index' # creates user_root_path
end

If the resource root path is not defined, root_path is used. However, if this default is not enough, you can customize it, for example:

def after_sign_in_path_for(resource)
  stored_location_for(resource) ||
    if resource.is_a?(User) && resource.can_publish?
      publisher_url
    else
      super
    end
end
# File lib/devise/controllers/helpers.rb, line 217
def after_sign_in_path_for(resource_or_scope)
  stored_location_for(resource_or_scope) || signed_in_root_path(resource_or_scope)
end
after_sign_out_path_for(resource_or_scope) click to toggle source

Method used by sessions controller to sign out a user. You can overwrite it in your ApplicationController to provide a custom hook for a custom scope. Notice that differently from after_sign_in_path_for this method receives a symbol with the scope, and not the resource.

By default it is the root_path.

# File lib/devise/controllers/helpers.rb, line 227
def after_sign_out_path_for(resource_or_scope)
  scope = Devise::Mapping.find_scope!(resource_or_scope)
  router_name = Devise.mappings[scope].router_name
  context = router_name ? send(router_name) : self
  context.respond_to?(:root_path) ? context.root_path : "/"
end
allow_params_authentication!() click to toggle source

Tell warden that params authentication is allowed for that specific page.

# File lib/devise/controllers/helpers.rb, line 165
def allow_params_authentication!
  request.env["devise.allow_params_authentication"] = true
end
devise_controller?() click to toggle source

Return true if it's a devise_controller. false to all controllers unless the controllers defined inside devise. Useful if you want to apply a before filter to all controllers, except the ones in devise:

before_filter :my_filter, unless: :devise_controller?
# File lib/devise/controllers/helpers.rb, line 149
def devise_controller?
  is_a?(::DeviseController)
end
devise_parameter_sanitizer() click to toggle source

Setup a param sanitizer to filter parameters using strong_parameters. See lib/devise/parameter_sanitizer.rb for more info. Override this method in your application controller to use your own parameter sanitizer.

# File lib/devise/controllers/helpers.rb, line 156
def devise_parameter_sanitizer
  @devise_parameter_sanitizer ||= if defined?(ActionController::StrongParameters)
    Devise::ParameterSanitizer.new(resource_class, resource_name, params)
  else
    Devise::BaseSanitizer.new(resource_class, resource_name, params)
  end
end
handle_unverified_request() click to toggle source

Overwrite Rails' handle unverified request to sign out all scopes, clear run strategies and remove cached variables.

Calls superclass method
# File lib/devise/controllers/helpers.rb, line 256
def handle_unverified_request
  super # call the default behaviour which resets/nullifies/raises
  request.env["devise.skip_storage"] = true
  sign_out_all_scopes(false)
end
is_flashing_format?() click to toggle source

Check if flash messages should be emitted. Default is to do it on navigational formats

# File lib/devise/controllers/helpers.rb, line 272
def is_flashing_format?
  is_navigational_format?
end
is_navigational_format?() click to toggle source
# File lib/devise/controllers/helpers.rb, line 266
def is_navigational_format?
  Devise.navigational_formats.include?(request_format)
end
request_format() click to toggle source
# File lib/devise/controllers/helpers.rb, line 262
def request_format
  @request_format ||= request.format.try(:ref)
end
sign_in_and_redirect(resource_or_scope, *args) click to toggle source

Sign in a user and tries to redirect first to the stored location and then to the url specified by after_sign_in_path_for. It accepts the same parameters as the sign_in method.

# File lib/devise/controllers/helpers.rb, line 237
def sign_in_and_redirect(resource_or_scope, *args)
  options  = args.extract_options!
  scope    = Devise::Mapping.find_scope!(resource_or_scope)
  resource = args.last || resource_or_scope
  sign_in(scope, resource, options)
  redirect_to after_sign_in_path_for(resource)
end
sign_out_and_redirect(resource_or_scope) click to toggle source

Sign out a user and tries to redirect to the url specified by after_sign_out_path_for.

# File lib/devise/controllers/helpers.rb, line 247
def sign_out_and_redirect(resource_or_scope)
  scope = Devise::Mapping.find_scope!(resource_or_scope)
  redirect_path = after_sign_out_path_for(scope)
  Devise.sign_out_all_scopes ? sign_out : sign_out(scope)
  redirect_to redirect_path
end
signed_in_root_path(resource_or_scope) click to toggle source

The scope root url to be used when they're signed in. By default, it first tries to find a resource_root_path, otherwise it uses the root_path.

# File lib/devise/controllers/helpers.rb, line 171
def signed_in_root_path(resource_or_scope)
  scope = Devise::Mapping.find_scope!(resource_or_scope)
  router_name = Devise.mappings[scope].router_name

  home_path = "#{scope}_root_path"

  context = router_name ? send(router_name) : self

  if context.respond_to?(home_path, true)
    context.send(home_path)
  elsif context.respond_to?(:root_path)
    context.root_path
  elsif respond_to?(:root_path)
    root_path
  else
    "/"
  end
end
warden() click to toggle source

The main accessor for the warden proxy instance

# File lib/devise/controllers/helpers.rb, line 140
def warden
  request.env['warden']
end

Private Instance Methods

expire_data_after_sign_out!() click to toggle source
# File lib/devise/controllers/helpers.rb, line 284
def expire_data_after_sign_out!
  Devise.mappings.each { |_,m| instance_variable_set("@current_#{m.name}", nil) }
  super
end
expire_session_data_after_sign_in!() click to toggle source
# File lib/devise/controllers/helpers.rb, line 278
def expire_session_data_after_sign_in!
  ActiveSupport::Deprecation.warn "expire_session_data_after_sign_in! is deprecated "            "in favor of expire_data_after_sign_in!"
  expire_data_after_sign_in!
end