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 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