1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
# encoding: utf-8
# frozen_string_literal: true
module Warden
class SessionSerializer
attr_reader :env
def initialize(env)
@env = env
end
def key_for(scope)
"warden.user.#{scope}.key"
end
def serialize(user)
user
end
def deserialize(key)
key
end
def store(user, scope)
return unless user
method_name = "#{scope}_serialize"
specialized = respond_to?(method_name)
session[key_for(scope)] = specialized ? send(method_name, user) : serialize(user)
end
def fetch(scope)
key = session[key_for(scope)]
return nil unless key
method_name = "#{scope}_deserialize"
user = respond_to?(method_name) ? send(method_name, key) : deserialize(key)
delete(scope) unless user
user
end
def stored?(scope)
!!session[key_for(scope)]
end
def delete(scope, user=nil)
session.delete(key_for(scope))
end
# We can't cache this result because the session can be lazy loaded
def session
env["rack.session"] || {}
end
end # SessionSerializer
end # Warden
|