Class: Authlogic::ControllerAdapters::RackAdapter

Inherits:
AbstractAdapter show all
Defined in:
lib/authlogic/controller_adapters/rack_adapter.rb

Overview

Adapter for authlogic to make it function as a Rack middleware. First you'll have write your own Rack adapter where you have to set your cookie domain.

class YourRackAdapter < Authlogic::ControllerAdapters::RackAdapter
  def cookie_domain
    'your_cookie_domain_here.com'
  end
end

Next you need to set up a rack middleware like this:

class AuthlogicMiddleware
  def initialize(app)
    @app = app
  end

  def call(env)
    YourRackAdapter.new(env)
    @app.call(env)
  end
end

And that is all! Now just load this middleware into rack:

use AuthlogicMiddleware

Authlogic will expect a User and a UserSession object to be present:

class UserSession < Authlogic::Session::Base
  # Authlogic options go here
end

class User < ApplicationRecord
  acts_as_authentic
end

Constant Summary

Constants inherited from AbstractAdapter

AbstractAdapter::E_COOKIE_DOMAIN_ADAPTER

Instance Attribute Summary

Attributes inherited from AbstractAdapter

#controller

Instance Method Summary collapse

Methods inherited from AbstractAdapter

#authenticate_with_http_basic, #cookie_domain, #last_request_update_allowed?, #params, #request, #request_content_type, #respond_to_missing?, #responds_to_single_access_allowed?, #session, #single_access_allowed?

Constructor Details

#initialize(env) ⇒ RackAdapter

Returns a new instance of RackAdapter.


42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/authlogic/controller_adapters/rack_adapter.rb', line 42

def initialize(env)
  # We use the Rack::Request object as the controller object.
  # For this to work, we have to add some glue.
  request = Rack::Request.new(env)

  request.instance_eval do
    def request
      self
    end

    def remote_ip
      ip
    end
  end

  super(request)
  Authlogic::Session::Base.controller = self
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Authlogic::ControllerAdapters::AbstractAdapter

Instance Method Details

#cookiesObject

Rack Requests stores cookies with not just the value, but also with flags and expire information in the hash. Authlogic does not like this, so we drop everything except the cookie value.


64
65
66
67
68
69
# File 'lib/authlogic/controller_adapters/rack_adapter.rb', line 64

def cookies
  controller
    .cookies
    .map { |key, value_hash| { key => value_hash[:value] } }
    .inject(:merge) || {}
end