diff --git a/lib/datadog/kit/appsec/events.rb b/lib/datadog/kit/appsec/events.rb index a85345aa8da..a4d7cd33ac6 100644 --- a/lib/datadog/kit/appsec/events.rb +++ b/lib/datadog/kit/appsec/events.rb @@ -23,7 +23,7 @@ def self.track_login_success(trace, user:, **others) track(LOGIN_SUCCESS_EVENT, trace, **others) user_options = user.dup - user_id = user.delete(:id) + user_id = user_options.delete(:id) raise ArgumentError, 'missing required key: :user => { :id }' if user_id.nil? diff --git a/spec/datadog/kit/appsec/events_spec.rb b/spec/datadog/kit/appsec/events_spec.rb index 648f11ec039..05fba069bb3 100644 --- a/spec/datadog/kit/appsec/events_spec.rb +++ b/spec/datadog/kit/appsec/events_spec.rb @@ -32,6 +32,15 @@ end expect(meta).to include('usr.id' => '42', 'appsec.events.users.login.success.foo' => 'bar') end + + it 'maintains integrity of user argument' do + user_argument = { id: '42' } + user_argument_dup = user_argument.dup + trace_op.measure('root') do + described_class.track_login_success(trace_op, user: user_argument, foo: 'bar') + end + expect(user_argument).to eql(user_argument_dup) + end end describe '#track_login_failure' do