31 lines
832 B
Ruby
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
|