diff --git a/.gitignore b/.gitignore
index 1e01de9a..0ab80536 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,5 @@
.DS_Store
-.swp
+*.swp
*.log
*.sqlite3
pkg/*
diff --git a/lib/authlogic/acts_as_authentic/session_maintenance.rb b/lib/authlogic/acts_as_authentic/session_maintenance.rb
index 0bffc92c..c0122295 100644
--- a/lib/authlogic/acts_as_authentic/session_maintenance.rb
+++ b/lib/authlogic/acts_as_authentic/session_maintenance.rb
@@ -57,6 +57,17 @@ def session_class(value = nil)
rw_config(:session_class, value, const)
end
alias_method :session_class=, :session_class
+
+ # This method allows you to change the record's primary_key in the
+ # context of Authlogic.
+ #
+ # * Default: :id
+ # * Accepts: Symbol
+ def authlogic_record_primary_key(value = nil)
+ rw_config(:authlogic_record_primary_key, value,
+ base_class.primary_key.to_sym)
+ end
+ alias_method :authlogic_record_primary_key=, :authlogic_record_primary_key
end
module Methods
@@ -64,6 +75,7 @@ def self.included(klass)
klass.class_eval do
before_save :get_session_information, :if => :update_sessions?
before_save :maintain_sessions, :if => :update_sessions?
+ authlogic_record_primary_key
end
end
diff --git a/lib/authlogic/session/cookies.rb b/lib/authlogic/session/cookies.rb
index d7580495..68615c20 100644
--- a/lib/authlogic/session/cookies.rb
+++ b/lib/authlogic/session/cookies.rb
@@ -155,7 +155,7 @@ def cookie_credentials
def persist_by_cookie
persistence_token, record_id = cookie_credentials
if !persistence_token.nil?
- record = record_id.nil? ? search_for_record("find_by_persistence_token", persistence_token) : search_for_record("find_by_#{klass.primary_key}", record_id)
+ record = record_id.nil? ? search_for_record("find_by_persistence_token", persistence_token) : search_for_record("find_by_#{klass.authlogic_record_primary_key}", record_id)
self.unauthorized_record = record if record && record.persistence_token == persistence_token
valid?
else
@@ -165,7 +165,7 @@ def persist_by_cookie
def save_cookie
controller.cookies[cookie_key] = {
- :value => "#{record.persistence_token}::#{record.send(record.class.primary_key)}",
+ :value => "#{record.persistence_token}::#{record.send(record.class.authlogic_record_primary_key)}",
:expires => remember_me_until,
:secure => secure,
:httponly => httponly,
diff --git a/lib/authlogic/session/session.rb b/lib/authlogic/session/session.rb
index 565dd760..8311d4ea 100644
--- a/lib/authlogic/session/session.rb
+++ b/lib/authlogic/session/session.rb
@@ -36,7 +36,7 @@ def persist_by_session
# This is done for performance reasons and to save on queries.
record = record_id.nil? ?
search_for_record("find_by_persistence_token", persistence_token) :
- search_for_record("find_by_#{klass.primary_key}", record_id)
+ search_for_record("find_by_#{klass.authlogic_record_primary_key}", record_id)
self.unauthorized_record = record if record && record.persistence_token == persistence_token
valid?
else
@@ -45,7 +45,7 @@ def persist_by_session
end
def session_credentials
- [controller.session[session_key], controller.session["#{session_key}_#{klass.primary_key}"]].compact
+ [controller.session[session_key], controller.session["#{session_key}_#{klass.authlogic_record_primary_key}"]].compact
end
def session_key
diff --git a/lib/authlogic/test_case/rails_request_adapter.rb b/lib/authlogic/test_case/rails_request_adapter.rb
index 2beb2ef7..39e6f265 100644
--- a/lib/authlogic/test_case/rails_request_adapter.rb
+++ b/lib/authlogic/test_case/rails_request_adapter.rb
@@ -9,7 +9,7 @@ def authenticate_with_http_basic(&block)
def cookies
new_cookies = MockCookieJar.new
super.each do |key, value|
- new_cookies[key] = value[:value]
+ new_cookies[key] = { :value => value[:value] }
end
new_cookies
end
diff --git a/test/acts_as_authentic_test/session_maintenance_test.rb b/test/acts_as_authentic_test/session_maintenance_test.rb
index 3ae53bb8..493f9fca 100644
--- a/test/acts_as_authentic_test/session_maintenance_test.rb
+++ b/test/acts_as_authentic_test/session_maintenance_test.rb
@@ -10,6 +10,14 @@ def test_maintain_sessions_config
assert User.maintain_sessions
end
+ def test_authlogic_record_primary_key_config
+ assert_equal User.authlogic_record_primary_key, :id
+ User.authlogic_record_primary_key = :login
+ assert_equal User.authlogic_record_primary_key, :login
+ User.authlogic_record_primary_key = :id
+ assert_equal User.authlogic_record_primary_key, :id
+ end
+
def test_login_after_create
assert User.create(:login => "awesome", :password => "saweet", :password_confirmation => "saweet", :email => "awesome@awesome.com")
assert UserSession.find