Sha256: 436378d285c7695ce6e7d75af1aedb6d1b18f7317309e04af8646f51a72b8b5f

Contents?: true

Size: 1.85 KB

Versions: 1

Compression:

Stored size: 1.85 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

1 entries across 1 versions & 1 rubygems

Version Path
authlogic-3.5.0 lib/authlogic/controller_adapters/rack_adapter.rb