module Devise
Constants
- ALL
Constants which holds devise configuration for extensions. Those should not be modified by the “end user” (this is why they are constants).
- CONTROLLERS
- NO_INPUT
Strategies that do not require user input.
- ROUTES
- STRATEGIES
- TRUE_VALUES
True values used to check params
- URL_HELPERS
- VERSION
Public Class Methods
Small method that adds a mapping to Devise.
# File lib/devise.rb, line 344 def self.add_mapping(resource, options) mapping = Devise::Mapping.new(resource, options) @@mappings[mapping.name] = mapping @@default_scope ||= mapping.name @@helpers.each { |h| h.define_helpers(mapping) } mapping end
Register available devise modules. For the standard modules that Devise provides, this method is called from lib/devise/modules.rb. Third-party modules need to be added explicitly using this method.
Note that adding a module using this method does not cause it to be used in the authentication process. That requires that the module be listed in the arguments passed to the 'devise' method in the model class definition.
Options:¶ ↑
+model+ - String representing the load path to a custom *model* for this module (to autoload.) +controller+ - Symbol representing the name of an existing or custom *controller* for this module. +route+ - Symbol representing the named *route* helper for this module. +strategy+ - Symbol representing if this module got a custom *strategy*. +insert_at+ - Integer representing the order in which this module's model will be included
All values, except :model, accept also a boolean and will have the same name as the given module name.
Examples:¶ ↑
Devise.add_module(:party_module) Devise.add_module(:party_module, strategy: true, controller: :sessions) Devise.add_module(:party_module, model: 'party_module/model') Devise.add_module(:party_module, insert_at: 0)
# File lib/devise.rb, line 377 def self.add_module(module_name, options = {}) options.assert_valid_keys(:strategy, :model, :controller, :route, :no_input, :insert_at) ALL.insert (options[:insert_at] || -1), module_name if strategy = options[:strategy] strategy = (strategy == true ? module_name : strategy) STRATEGIES[module_name] = strategy end if controller = options[:controller] controller = (controller == true ? module_name : controller) CONTROLLERS[module_name] = controller end NO_INPUT << strategy if options[:no_input] if route = options[:route] case route when TrueClass key, value = module_name, [] when Symbol key, value = route, [] when Hash key, value = route.keys.first, route.values.flatten else raise ArgumentError, ":route should be true, a Symbol or a Hash" end URL_HELPERS[key] ||= [] URL_HELPERS[key].concat(value) URL_HELPERS[key].uniq! ROUTES[module_name] = key end if options[:model] path = (options[:model] == true ? "devise/models/#{module_name}" : options[:model]) camelized = ActiveSupport::Inflector.camelize(module_name.to_s) Devise::Models.send(:autoload, camelized.to_sym, path) end Devise::Mapping.add_module module_name end
# File lib/devise.rb, line 324 def self.available_router_name router_name || :main_app end
Generate a friendly string randomly to be used as token. By default, length is 20 characters.
# File lib/devise.rb, line 491 def self.friendly_token(length = 20) # To calculate real characters, we must perform this operation. # See SecureRandom.urlsafe_base64 rlength = (length * 3) / 4 SecureRandom.urlsafe_base64(rlength).tr('lIO0', 'sxyz') end
Include helpers in the given scope to AC and AV.
# File lib/devise.rb, line 447 def self.include_helpers(scope) ActiveSupport.on_load(:action_controller) do include scope::Helpers if defined?(scope::Helpers) include scope::UrlHelpers end ActiveSupport.on_load(:action_view) do include scope::UrlHelpers end end
Get the mailer class from the mailer reference object.
# File lib/devise.rb, line 333 def self.mailer @@mailer_ref.get end
Set the mailer reference object to access the mailer.
# File lib/devise.rb, line 338 def self.mailer=(class_name) @@mailer_ref = ref(class_name) end
Specify an OmniAuth provider.
config.omniauth :github, APP_ID, APP_SECRET
# File lib/devise.rb, line 441 def self.omniauth(provider, *args) config = Devise::OmniAuth::Config.new(provider, args) @@omniauth_configs[config.strategy_name.to_sym] = config end
# File lib/devise.rb, line 328 def self.omniauth_providers omniauth_configs.keys end
# File lib/devise.rb, line 319 def self.ref(arg) ActiveSupport::Dependencies.reference(arg) Getter.new(arg) end
Regenerates url helpers considering Devise.mapping
# File lib/devise.rb, line 459 def self.regenerate_helpers! Devise::Controllers::UrlHelpers.remove_helpers! Devise::Controllers::UrlHelpers.generate_helpers! end
constant-time comparison algorithm to prevent timing attacks
# File lib/devise.rb, line 499 def self.secure_compare(a, b) return false if a.blank? || b.blank? || a.bytesize != b.bytesize l = a.unpack "C#{a.bytesize}" res = 0 b.each_byte { |byte| res |= byte ^ l.shift } res == 0 end
Default way to set up Devise. Run rails generate devise_install to create a fresh initializer with all configuration values.
# File lib/devise.rb, line 305 def self.setup yield self end
Sets warden configuration using a block that will be invoked on warden initialization.
Devise.setup do |config| config.allow_unconfirmed_access_for = 2.days config.warden do |manager| # Configure warden to use other strategies, like oauth. manager.oauth(:twitter) end end
# File lib/devise.rb, line 433 def self.warden(&block) @@warden_config_blocks << block end