class TinyAuth::Controller

Public Class Methods

new(model:, name: model.model_name.singular) click to toggle source

Defines a before action that will authenticate the resource. It also defines methods for accessing the currently authenticated resource. @param model [ActiveRecord::Base] @param name [Symbol] Used to define methods like `current_user`

@example

class ApplicationController < ActionController::Base
  include TinyAuth::Controller.new(model: User)

  before_action :authenticate_user

  def index
    if user_signed_in?
      render json: current_user
    else
      head :unauthorized
    end
  end
end
# File lib/tiny_auth/controller.rb, line 33
def initialize(model:, name: model.model_name.singular)
  authenticate = :"authenticate_#{name}"
  current = :"current_#{name}"
  current_ivar = :"@current_#{name}"
  signed_in = :"#{name}_signed_in?"

  attr_reader current

  define_method(signed_in) do
    !send(current).nil?
  end

  define_method(authenticate) do
    token = TinyAuth::Controller.token(request)

    if token
      resource = model.find_by_token(token)
      instance_variable_set(current_ivar, resource)
    end
  end
end
token(request) click to toggle source

Extract a token from a request @param request [ActionDispatch::HTTP::Request] @return [String,nil]

# File lib/tiny_auth/controller.rb, line 8
def self.token(request)
  header = request.authorization.to_s
  header[/^Bearer (.*)$/, 1].presence
end