diff --git a/lib/devise/hooks/timeoutable.rb b/lib/devise/hooks/timeoutable.rb index cc181747..79dc1f32 100644 --- a/lib/devise/hooks/timeoutable.rb +++ b/lib/devise/hooks/timeoutable.rb @@ -9,6 +9,11 @@ Warden::Manager.after_set_user do |record, warden, options| if record && record.respond_to?(:timedout?) && warden.authenticated?(scope) && options[:store] != false last_request_at = warden.session(scope)['last_request_at'] + + if last_request_at.is_a? Integer + last_request_at = Time.at(last_request_at).utc + end + proxy = Devise::Hooks::Proxy.new(warden) if record.timedout?(last_request_at) && !env['devise.skip_timeout'] @@ -22,7 +27,7 @@ Warden::Manager.after_set_user do |record, warden, options| end unless env['devise.skip_trackable'] - warden.session(scope)['last_request_at'] = Time.now.utc + warden.session(scope)['last_request_at'] = Time.now.utc.to_i end end end diff --git a/test/integration/timeoutable_test.rb b/test/integration/timeoutable_test.rb index 79f64313..f8981ef7 100644 --- a/test/integration/timeoutable_test.rb +++ b/test/integration/timeoutable_test.rb @@ -8,12 +8,11 @@ class SessionTimeoutTest < ActionDispatch::IntegrationTest test 'set last request at in user session after each request' do sign_in_as_user - old_last_request = last_request_at assert_not_nil last_request_at + @controller.user_session.delete('last_request_at') get users_path assert_not_nil last_request_at - assert_not_equal old_last_request, last_request_at end test 'set last request at in user session after each request is skipped if tracking is disabled' do