From 60822641cb9b4848dd0e75d64ec668d4d494cebc Mon Sep 17 00:00:00 2001 From: salidux Date: Wed, 19 Oct 2011 22:23:04 -0200 Subject: [PATCH 1/2] fix to obtain user original IP in a proxyed environment --- lib/devise/models/trackable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/devise/models/trackable.rb b/lib/devise/models/trackable.rb index f7136206ef..1089897b17 100644 --- a/lib/devise/models/trackable.rb +++ b/lib/devise/models/trackable.rb @@ -16,7 +16,7 @@ def update_tracked_fields!(request) self.last_sign_in_at = old_current || new_current self.current_sign_in_at = new_current - old_current, new_current = self.current_sign_in_ip, request.remote_ip + old_current, new_current = self.current_sign_in_ip, request.ip self.last_sign_in_ip = old_current || new_current self.current_sign_in_ip = new_current From d11402612f5779349afb79b0c90d2e4dbef1489c Mon Sep 17 00:00:00 2001 From: salidux Date: Sat, 22 Oct 2011 11:57:18 -0200 Subject: [PATCH 2/2] test for trackable behind a proxy --- test/integration/trackable_test.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/integration/trackable_test.rb b/test/integration/trackable_test.rb index 695f11994e..6559c576a9 100644 --- a/test/integration/trackable_test.rb +++ b/test/integration/trackable_test.rb @@ -36,6 +36,17 @@ class TrackableHooksTest < ActionController::IntegrationTest assert_equal "127.0.0.1", user.current_sign_in_ip assert_equal "127.0.0.1", user.last_sign_in_ip end + + test "current remote ip returns original ip behind a non transparent proxy" do + user = create_user + + arbitrary_ip = '192.168.1.69' + sign_in_as_user do + header 'HTTP_X_FORWARDED_FOR', arbitrary_ip + end + user.reload + assert_equal arbitrary_ip, user.current_sign_in_ip + end test "increase sign in count" do user = create_user