Files
api/app/models/refresh_token.rb
2026-05-18 13:17:28 -04:00

31 lines
832 B
Ruby

class RefreshToken < ApplicationRecord
belongs_to :user
validates :token, presence: true, uniqueness: true
validates :expires_at, presence: true
before_validation :generate_token, on: :create
# check if token is still active (not revoked and not expired)
def active?
!revoked && expires_at > Time.current
end
# revoke this token
def revoke!
update!(revoked: true)
end
# generate a secure random token
def generate_token
self.token ||= SecureRandom.urlsafe_base64(32)
self.expires_at ||= 7.days.from_now
end
# cleanup expired or old revoked tokens (run via scheduled job)
# deletes tokens that are either expired OR (revoked AND old)
def self.cleanup_old_tokens
where("expires_at < ? OR (revoked = ? AND created_at < ?)", 30.days.ago, true, 30.days.ago).delete_all
end
end