module DeviseTokenAuth::Controllers::Helpers::ClassMethods

Public Instance Methods

devise_token_auth_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
  render_authenticate_error         # Render error unless user or admin are signed in

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_token_auth/controllers/helpers.rb, line 29
        def devise_token_auth_group(group_name, opts={})
          mappings = "[#{ opts[:contains].map { |m| ":#{m}" }.join(',') }]"

          class_eval <<-METHODS, __FILE__, __LINE__ + 1
            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|
                  set_user_by_token(mapping)
                end

                unless current_#{group_name}
                  render_authenticate_error
                end
              end
            end

            def #{group_name}_signed_in?
              #{mappings}.any? do |mapping|
                set_user_by_token(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 = set_user_by_token(mapping)
                return current if current
              end
              nil
            end

            def current_#{group_name.to_s.pluralize}
              #{mappings}.map do |mapping|
                set_user_by_token(mapping)
              end.compact
            end

            def render_authenticate_error
              return render json: {
                errors: [I18n.t('devise.failure.unauthenticated')]
              }, status: 401
            end

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