Sha256: fc79438a7d5a4dc2a254e14e50762090eae9da0b2e37bcf08ec77cbf1070806f

Contents?: true

Size: 1.5 KB

Versions: 4

Compression:

Stored size: 1.5 KB

Contents

require 'active_support/concern'

require 'token_authenticate_me/concerns/controllers/token_authenticateable'

module TokenAuthenticateMe
  module Concerns
    module Controllers
      module Sessionable
        extend ActiveSupport::Concern

        include TokenAuthenticateMe::Concerns::Controllers::TokenAuthenticateable

        included do
          skip_before_action :authenticate, only: [:create]
          after_action :cleanup_sessions, only: [:destroy]

          def create
            resource = User.where('username=? OR email=?', params[:username], params[:username]).first
            if resource && resource.authenticate(params[:password])
              @session = Session.create(user_id: resource.id)
              render json: @session, status: 201
            else
              render json: { message: 'Bad credentials' }, status: 401
            end
          end

          def show
            @session = authenticate_token
            render json: @session
          end

          def destroy
            authenticate_token.destroy

            render status: 204, nothing: true
          rescue
            render_unauthorized
          end

          private

          def session_params
            params.permit(:username, :email, :password)
          end

          def cleanup_sessions
            ApiSession.where('expiration < ?', DateTime.now).delete_all
          rescue
            Rails.logger.warn 'Error cleaning up old authentication sessions'
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
token_authenticate_me-0.5.3 lib/token_authenticate_me/concerns/controllers/sessionable.rb
token_authenticate_me-0.5.2 lib/token_authenticate_me/concerns/controllers/sessionable.rb
token_authenticate_me-0.5.1 lib/token_authenticate_me/concerns/controllers/sessionable.rb
token_authenticate_me-0.5.0 lib/token_authenticate_me/concerns/controllers/sessionable.rb