29 lines
631 B
Ruby
29 lines
631 B
Ruby
class UserSession < ApplicationRecord
|
|
TOKEN_LENGTH = 32
|
|
|
|
belongs_to :user
|
|
|
|
validates :token_digest, presence: true, uniqueness: true
|
|
|
|
def self.create_for!(user)
|
|
raw_token = generate_raw_token
|
|
user_session = create!(user: user, token_digest: digest(raw_token), last_used_at: Time.current)
|
|
|
|
[ user_session, raw_token ]
|
|
end
|
|
|
|
def self.find_by_token(raw_token)
|
|
return if raw_token.blank?
|
|
|
|
find_by(token_digest: digest(raw_token))
|
|
end
|
|
|
|
def self.generate_raw_token
|
|
SecureRandom.urlsafe_base64(TOKEN_LENGTH)
|
|
end
|
|
|
|
def self.digest(raw_token)
|
|
Digest::SHA256.hexdigest(raw_token.to_s)
|
|
end
|
|
end
|