diff --git a/app/models/api_key.rb b/app/models/api_key.rb index b55b496cee7..99f8e209ac4 100644 --- a/app/models/api_key.rb +++ b/app/models/api_key.rb @@ -67,6 +67,13 @@ class ApiKey < ActiveRecord::Base api_key_scopes.blank? || api_key_scopes.any? { |s| s.permits?(env) } end + + def update_last_used!(now = Time.zone.now) + return if last_used_at && (last_used_at > 1.minute.ago) + + # using update_column to avoid the AR transaction + update_column(:last_used_at, now) + end end # == Schema Information diff --git a/lib/auth/default_current_user_provider.rb b/lib/auth/default_current_user_provider.rb index 519caeae939..31a68790eaf 100644 --- a/lib/auth/default_current_user_provider.rb +++ b/lib/auth/default_current_user_provider.rb @@ -385,7 +385,9 @@ class Auth::DefaultCurrentUserProvider end if user && can_write? - api_key.update_columns(last_used_at: Time.zone.now) + Scheduler::Defer.later "Updating api_key last_used" do + api_key.update_last_used! + end end user