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 < ActiveRecord::Base
  acts_as_authentic
end

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, #responds_to_last_request_update_allowed?, #responds_to_single_access_allowed?, #session, #single_access_allowed?

Constructor Details

#initialize(env) ⇒ RackAdapter

Returns a new instance of RackAdapter.



41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/authlogic/controller_adapters/rack_adapter.rb', line 41

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; self.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



57
58
59
# File 'lib/authlogic/controller_adapters/rack_adapter.rb', line 57

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