Sha256: 5b395343576443dff79f8662615a6887fec82f9a53a9b329a2ca980ed055955e
Contents?: true
Size: 1.2 KB
Versions: 3
Compression:
Stored size: 1.2 KB
Contents
module Touth module Authenticator module_function def issue_access_token(model, lifetime = Touth.access_token_lifetime) expires_at = Time.now.to_i + lifetime data = Marshal.dump([ model.class, model.id, expires_at, ]) data_sign = Touth.digest data data_key = gen_data_key model, data_sign [ data_sign, data_key, data, ].join.unpack('H*')[0] end def valid_access_token?(token) !!get_model(token) end def get_model(token) @access_token_data_cache ||= {} model = @access_token_data_cache[token] return model if model begin data_sign, data_key, data = [token].pack('H*').unpack 'A32A32A*' if data_sign == Touth.digest(data) model_class, id, expires_at = Marshal.load data model = model_class.find id if gen_data_key(model, data_sign) == data_key && Time.now.to_i < expires_at @access_token_data_cache[token] = model end end rescue nil end end def gen_data_key(model, data_sign) Touth.digest [data_sign, model.send(Touth.password_field)].join end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
touth-1.1.2 | lib/touth/authenticator.rb |
touth-1.1.1 | lib/touth/authenticator.rb |
touth-1.1.0 | lib/touth/authenticator.rb |