Class: DeviseController
- Inherits:
-
Object
- Object
- DeviseController
- Includes:
- Devise::Controllers::ScopedViews
- Defined in:
- app/controllers/devise_controller.rb
Overview
All Devise controllers are inherited from here.
Direct Known Subclasses
Devise::ConfirmationsController, Devise::OmniauthCallbacksController, Devise::PasswordsController, Devise::RegistrationsController, Devise::UnlocksController
Instance Method Summary collapse
-
#_prefixes ⇒ Object
Override prefixes to consider the scoped view.
-
#assert_is_devise_resource! ⇒ Object
protected
Checks whether it’s a devise mapped resource or not.
- #clean_up_passwords(object) ⇒ Object protected
- #devise_i18n_options(options) ⇒ Object protected
-
#devise_mapping ⇒ Object
Attempt to find the mapped route for devise based on request path.
-
#find_message(kind, options = {}) ⇒ Object
protected
Get message for given.
-
#navigational_formats ⇒ Object
protected
Returns real navigational formats which are supported by Rails.
-
#require_no_authentication ⇒ Object
protected
Helper for use in before_filters where no authentication is required.
-
#resource ⇒ Object
Gets the actual resource stored in the instance variable.
-
#resource=(new_resource) ⇒ Object
protected
Sets the resource creating an instance variable.
-
#resource_class ⇒ Object
Proxy to devise map class.
-
#resource_name ⇒ Object
(also: #scope_name)
Proxy to devise map name.
- #resource_params ⇒ Object protected
- #respond_with_navigational(*args, &block) ⇒ Object protected
-
#set_flash_message(key, kind, options = {}) ⇒ Object
protected
Sets the flash message with :key, using I18n.
-
#signed_in_resource ⇒ Object
Returns a signed in resource from session (if one exists).
-
#successfully_sent?(resource) ⇒ Boolean
protected
Helper for use after calling send_*_instructions methods on a resource.
- #unknown_action!(msg) ⇒ Object protected
Instance Method Details
#_prefixes ⇒ Object
Override prefixes to consider the scoped view. Notice we need to check for the request due to a bug in Action Controller tests that forces _prefixes to be loaded before even having a request object.
45 46 47 48 49 50 51 |
# File 'app/controllers/devise_controller.rb', line 45 def _prefixes #:nodoc: @_prefixes ||= if self.class.scoped_views? && request && devise_mapping ["#{devise_mapping.scoped_path}/#{controller_name}"] + super else super end end |
#assert_is_devise_resource! ⇒ Object (protected)
Checks whether it’s a devise mapped resource or not.
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'app/controllers/devise_controller.rb', line 58 def assert_is_devise_resource! #:nodoc: unknown_action! <<-MESSAGE unless devise_mapping Could not find devise mapping for path #{request.fullpath.inspect}. This may happen for two reasons: 1) You forgot to wrap your route inside the scope block. For example: devise_scope :user do get "/some/route" => "some_devise_controller" end 2) 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] MESSAGE end |
#clean_up_passwords(object) ⇒ Object (protected)
163 164 165 |
# File 'app/controllers/devise_controller.rb', line 163 def clean_up_passwords(object) object.clean_up_passwords if object.respond_to?(:clean_up_passwords) end |
#devise_i18n_options(options) ⇒ Object (protected)
150 151 152 |
# File 'app/controllers/devise_controller.rb', line 150 def () end |
#devise_mapping ⇒ Object
Attempt to find the mapped route for devise based on request path
37 38 39 |
# File 'app/controllers/devise_controller.rb', line 37 def devise_mapping @devise_mapping ||= request.env["devise.mapping"] end |
#find_message(kind, options = {}) ⇒ Object (protected)
Get message for given
155 156 157 158 159 160 161 |
# File 'app/controllers/devise_controller.rb', line 155 def (kind, = {}) [:scope] = "devise.#{controller_name}" [:default] = Array([:default]).unshift(kind.to_sym) [:resource_name] = resource_name = () I18n.t("#{[:resource_name]}.#{kind}", ) end |
#navigational_formats ⇒ Object (protected)
Returns real navigational formats which are supported by Rails
78 79 80 |
# File 'app/controllers/devise_controller.rb', line 78 def @navigational_formats ||= Devise..select { |format| Mime::EXTENSION_LOOKUP[format.to_s] } end |
#require_no_authentication ⇒ Object (protected)
Helper for use in before_filters where no authentication is required.
Example:
before_filter :require_no_authentication, only: :new
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'app/controllers/devise_controller.rb', line 96 def require_no_authentication assert_is_devise_resource! return unless 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) flash[:alert] = I18n.t("devise.failure.already_authenticated") redirect_to after_sign_in_path_for(resource) end end |
#resource ⇒ Object
Gets the actual resource stored in the instance variable
16 17 18 |
# File 'app/controllers/devise_controller.rb', line 16 def resource instance_variable_get(:"@#{resource_name}") end |
#resource=(new_resource) ⇒ Object (protected)
Sets the resource creating an instance variable
88 89 90 |
# File 'app/controllers/devise_controller.rb', line 88 def resource=(new_resource) instance_variable_set(:"@#{resource_name}", new_resource) end |
#resource_class ⇒ Object
Proxy to devise map class
27 28 29 |
# File 'app/controllers/devise_controller.rb', line 27 def resource_class devise_mapping.to end |
#resource_name ⇒ Object Also known as: scope_name
Proxy to devise map name
21 22 23 |
# File 'app/controllers/devise_controller.rb', line 21 def resource_name devise_mapping.name end |
#resource_params ⇒ Object (protected)
173 174 175 |
# File 'app/controllers/devise_controller.rb', line 173 def resource_params params.fetch(resource_name, {}) end |
#respond_with_navigational(*args, &block) ⇒ Object (protected)
167 168 169 170 171 |
# File 'app/controllers/devise_controller.rb', line 167 def (*args, &block) respond_with(*args) do |format| format.any(*, &block) end end |
#set_flash_message(key, kind, options = {}) ⇒ Object (protected)
Sets the flash message with :key, using I18n. By default you are able to setup your messages using specific resource scope, and if no one is found we look to default scope. Example (i18n locale file):
en:
devise:
passwords:
#default_scope_messages - only if resource_scope is not found
user:
#resource_scope_messages
Please refer to README or en.yml locale file to check what messages are available.
145 146 147 148 |
# File 'app/controllers/devise_controller.rb', line 145 def (key, kind, = {}) = (kind, ) flash[key] = if .present? end |
#signed_in_resource ⇒ Object
Returns a signed in resource from session (if one exists)
32 33 34 |
# File 'app/controllers/devise_controller.rb', line 32 def signed_in_resource warden.authenticate(scope: resource_name) end |
#successfully_sent?(resource) ⇒ Boolean (protected)
Helper for use after calling send_*_instructions methods on a resource. If we are in paranoid mode, we always act as if the resource was valid and instructions were sent.
117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'app/controllers/devise_controller.rb', line 117 def successfully_sent?(resource) notice = if Devise.paranoid resource.errors.clear :send_paranoid_instructions elsif resource.errors.empty? :send_instructions end if notice :notice, notice if is_flashing_format? true end end |
#unknown_action!(msg) ⇒ Object (protected)
82 83 84 85 |
# File 'app/controllers/devise_controller.rb', line 82 def unknown_action!(msg) logger.debug "[Devise] #{msg}" if logger raise AbstractController::ActionNotFound, msg end |