Module: DeviseTokenAuth::Controllers::Helpers

Extended by:
ActiveSupport::Concern
Included in:
DeviseTokenAuth::Concerns::SetUserByToken
Defined in:
lib/devise_token_auth/controllers/helpers.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Class Method Details

.define_helpers(mapping) ⇒ Object

Define authentication filters and accessor helpers based on mappings. These filters should be used inside the controllers as before_filters, so you can control the scope of the user who should be signed in to access that specific controller/action. Example:

Roles:
User
Admin

Generated methods:
authenticate_user!  # Signs user in or 401
authenticate_admin! # Signs admin in or 401
user_signed_in?     # Checks whether there is a user signed in or not
admin_signed_in?    # Checks whether there is an admin signed in or not
current_user        # Current signed in user
current_admin       # Current signed in admin
user_session        # Session data available only to the user scope
admin_session       # Session data available only to the admin scope

Use:
before_filter :authenticate_user!  # Tell devise to use :user map
before_filter :authenticate_admin! # Tell devise to use :admin map


98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/devise_token_auth/controllers/helpers.rb', line 98

def self.define_helpers(mapping) #:nodoc:
  mapping = mapping.name

  class_eval <<-METHODS, __FILE__, __LINE__ + 1
    def authenticate_#{mapping}!
      unless current_#{mapping}
        return render json: {
          errors: ["Authorized users only."]
        }, status: 401
      end
    end

    def #{mapping}_signed_in?
      !!current_#{mapping}
    end

    def current_#{mapping}
      @current_#{mapping} ||= set_user_by_token(:#{mapping})
    end

    def #{mapping}_session
      current_#{mapping} && warden.session(:#{mapping})
    end
  METHODS

  ActiveSupport.on_load(:action_controller) do
    helper_method "current_#{mapping}", "#{mapping}_signed_in?", "#{mapping}_session"
  end
end