Sha256: ba95e93d5be0f62541d9bf33083788250e4f29de95f1f9b0f4ca745533f5d53c

Contents?: true

Size: 1.89 KB

Versions: 4

Compression:

Stored size: 1.89 KB

Contents

module Authlogic
  module ControllerAdapters
    # 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
    #
    class RackAdapter < AbstractAdapter
      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

      # 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
      def cookies
        controller.cookies.map { |key, value_hash| { key => value_hash[:value] } }.inject(:merge) || {}
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
authlogic-3.8.0 lib/authlogic/controller_adapters/rack_adapter.rb
authlogic-3.7.0 lib/authlogic/controller_adapters/rack_adapter.rb
authlogic-3.6.1 lib/authlogic/controller_adapters/rack_adapter.rb
authlogic-3.6.0 lib/authlogic/controller_adapters/rack_adapter.rb