module Devise::Controllers::Helpers::ClassMethods

Public Instance Methods

devise_group(group_name, opts={}) click to toggle source

Define authentication filters and accessor helpers for a group of mappings. These methods are useful when you are working with multiple mappings that share some functionality. They are pretty much the same as the ones defined for normal mappings.

Example:

inside BlogsController (or any other controller, it doesn't matter which):
  devise_group :blogger, contains: [:user, :admin]

Generated methods:
  authenticate_blogger!  # Redirects unless user or admin are signed in
  blogger_signed_in?     # Checks whether there is either a user or an admin signed in
  current_blogger        # Currently signed in user or admin
  current_bloggers       # Currently signed in user and admin

Use:
  before_action :authenticate_blogger!              # Redirects unless either a user or an admin are authenticated
  before_action ->{ authenticate_blogger! :admin }  # Redirects to the admin login page
  current_blogger :user                             # Preferably returns a User if one is signed in
# File lib/devise/controllers/helpers.rb, line 38
        def devise_group(group_name, opts={})
          mappings = "[#{ opts[:contains].map { |m| ":#{m}" }.join(',') }]"

          class_eval "            def authenticate_#{group_name}!(favourite=nil, opts={})
              unless #{group_name}_signed_in?
                mappings = #{mappings}
                mappings.unshift mappings.delete(favourite.to_sym) if favourite
                mappings.each do |mapping|
                  opts[:scope] = mapping
                  warden.authenticate!(opts) if !devise_controller? || opts.delete(:force)
                end
              end
            end

            def #{group_name}_signed_in?
              #{mappings}.any? do |mapping|
                warden.authenticate?(scope: mapping)
              end
            end

            def current_#{group_name}(favourite=nil)
              mappings = #{mappings}
              mappings.unshift mappings.delete(favourite.to_sym) if favourite
              mappings.each do |mapping|
                current = warden.authenticate(scope: mapping)
                return current if current
              end
              nil
            end

            def current_#{group_name.to_s.pluralize}
              #{mappings}.map do |mapping|
                warden.authenticate(scope: mapping)
              end.compact
            end

            if respond_to?(:helper_method)
              helper_method "current_#{group_name}", "current_#{group_name.to_s.pluralize}", "#{group_name}_signed_in?"
            end
", __FILE__, __LINE__ + 1
        end
log_process_action(payload) click to toggle source
Calls superclass method
# File lib/devise/controllers/helpers.rb, line 81
def log_process_action(payload)
  payload[:status] ||= 401 unless payload[:exception]
  super
end