-
Notifications
You must be signed in to change notification settings - Fork 637
/
rails_adapter.rb
48 lines (40 loc) · 2.03 KB
/
rails_adapter.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
module Authlogic
module ControllerAdapters
# Adapts authlogic to work with rails. The point is to close the gap between what authlogic expects and what the rails controller object
# provides. Similar to how ActiveRecord has an adapter for MySQL, PostgreSQL, SQLite, etc.
class RailsAdapter < AbstractAdapter
class AuthlogicLoadedTooLateError < StandardError; end
def authenticate_with_http_basic(&block)
controller.authenticate_with_http_basic(&block)
end
def cookies
controller.send(:cookies)
end
def cookie_domain
@cookie_domain_key ||= ActiveRecord::VERSION::STRING >= '2.3' ? :domain : :session_domain
controller.request.session_options[@cookie_domain_key]
end
def request_content_type
request.format.to_s
end
# Lets Authlogic know about the controller object via a before filter, AKA "activates" authlogic.
module RailsImplementation
def self.included(klass) # :nodoc:
if defined?(::ApplicationController)
raise AuthlogicLoadedTooLateError.new("Authlogic is trying to prepend a before_filter in ActionController::Base to active itself" +
", the problem is that ApplicationController has already been loaded meaning the before_filter won't get copied into your" +
" application. Generally this is due to another gem or plugin requiring your ApplicationController prematurely, such as" +
" the resource_controller plugin. The solution is to require Authlogic before these other gems / plugins. Please require" +
" authlogic first to get rid of this error.")
end
klass.prepend_before_filter :activate_authlogic
end
private
def activate_authlogic
Authlogic::Session::Base.controller = RailsAdapter.new(self)
end
end
end
end
end
ActionController::Base.send(:include, Authlogic::ControllerAdapters::RailsAdapter::RailsImplementation)