Skip to content

Commit

Permalink
Fixed issue when logging doesnt update last_request_at, so the next p…
Browse files Browse the repository at this point in the history
…ersistence try would fail.
  • Loading branch information
binarylogic committed Mar 24, 2009
1 parent 15c21a6 commit 14cca6b
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 7 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.rdoc
@@ -1,7 +1,8 @@
== 2.0.1
== 2.0.2

* Reset failed_login_count if consecutive_failed_logins_limit has been exceed and the failed_login_ban_for has passed.
* Update test helpers to use the new configuration scheme.
* Fixed issue when logging doesn't update last_request_at, so the next persistence try would fail.

== 2.0.1 released 2009-3-23

Expand Down
11 changes: 7 additions & 4 deletions lib/authlogic/session/magic_columns.rb
Expand Up @@ -15,9 +15,10 @@ def self.included(klass)
klass.class_eval do
extend Config
include InstanceMethods
after_persisting :set_last_request_at
after_persisting :set_last_request_at, :if => :set_last_request_at?
validate :increase_failed_login_count
before_save :update_info
before_save :set_last_request_at, :if => :set_last_request_at?
end
end

Expand Down Expand Up @@ -59,11 +60,13 @@ def update_info
record.current_login_ip = controller.request.remote_ip
end
end

def set_last_request_at?
record && record.class.column_names.include?("last_request_at") && (record.last_request_at.blank? || last_request_at_threshold.to_i.seconds.ago >= record.last_request_at)
end

def set_last_request_at
if record && record.class.column_names.include?("last_request_at") && (record.last_request_at.blank? || last_request_at_threshold.to_i.seconds.ago >= record.last_request_at)
record.last_request_at = klass.default_timezone == :utc ? Time.now.utc : Time.now
end
record.last_request_at = klass.default_timezone == :utc ? Time.now.utc : Time.now
end

def last_request_at_threshold
Expand Down
2 changes: 1 addition & 1 deletion lib/authlogic/testing/test_unit_helpers.rb
Expand Up @@ -17,7 +17,7 @@ def session_class(record)
def set_session_for(record)
session_class = session_class(record)
@request.session[session_class.session_key] = record.persistence_token
@request.session["#{session_class.session_key}_id"] = record.id
@request.session["#{session_class.session_key}_#{record.class.primary_key}"] = record.id
end

# Sets the cookie for a record. This way when you execute a request in your test, cookie values will be present.
Expand Down
4 changes: 3 additions & 1 deletion test/session_test/magic_columns_test.rb
Expand Up @@ -15,14 +15,16 @@ def test_last_request_at_threshold_config
class InstanceMethodsTest < ActiveSupport::TestCase
def test_after_persisting_set_last_request_at
ben = users(:ben)
assert UserSession.create(ben)

set_cookie_for(ben)
old_last_request_at = ben.last_request_at
assert UserSession.find
ben.reload
assert ben.last_request_at != old_last_request_at
end

def test_valide_increase_failed_login_count
def test_valid_increase_failed_login_count
ben = users(:ben)
old_failed_login_count = ben.failed_login_count
assert !UserSession.create(:login => ben.login, :password => "wrong")
Expand Down
9 changes: 9 additions & 0 deletions test/session_test/timeout_test.rb
Expand Up @@ -38,6 +38,15 @@ def test_stale_state

UserSession.logout_on_timeout = false
end

def test_successful_login
UserSession.logout_on_timeout = true
ben = users(:ben)
assert UserSession.create(:login => ben.login, :password => "benrocks")
assert session = UserSession.find
assert_equal ben, session.record
UserSession.logout_on_timeout = false
end
end
end
end

0 comments on commit 14cca6b

Please sign in to comment.