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

add_mapping(resource, options) click to toggle source

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
add_module(module_name, options = {}) click to toggle source

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
available_router_name() click to toggle source
# File lib/devise.rb, line 324
def self.available_router_name
  router_name || :main_app
end
friendly_token(length = 20) click to toggle source

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(scope) click to toggle source

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
mailer() click to toggle source

Get the mailer class from the mailer reference object.

# File lib/devise.rb, line 333
def self.mailer
  @@mailer_ref.get
end
mailer=(class_name) click to toggle source

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
omniauth(provider, *args) click to toggle source

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
omniauth_providers() click to toggle source
# File lib/devise.rb, line 328
def self.omniauth_providers
  omniauth_configs.keys
end
ref(arg) click to toggle source
# File lib/devise.rb, line 319
def self.ref(arg)
  ActiveSupport::Dependencies.reference(arg)
  Getter.new(arg)
end
regenerate_helpers!() click to toggle source

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
secure_compare(a, b) click to toggle source

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
setup() { |self| ... } click to toggle source

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
warden(&block) click to toggle source

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