2011-02-24 21:55:41 +01:00
|
|
|
module Devise
|
|
|
|
module Controllers
|
|
|
|
# A module that may be optionally included in a controller in order
|
2013-11-06 20:55:16 +01:00
|
|
|
# to provide remember me behavior. Useful when signing in is done
|
2014-11-14 14:45:09 -05:00
|
|
|
# through a callback, like in OmniAuth.
|
2011-02-24 21:55:41 +01:00
|
|
|
module Rememberable
|
|
|
|
# Return default cookie values retrieved from session options.
|
|
|
|
def self.cookie_values
|
|
|
|
Rails.configuration.session_options.slice(:path, :domain, :secure)
|
|
|
|
end
|
|
|
|
|
|
|
|
# Remembers the given resource by setting up a cookie
|
|
|
|
def remember_me(resource)
|
2013-08-05 10:24:11 +02:00
|
|
|
return if env["devise.skip_storage"]
|
2011-02-24 21:55:41 +01:00
|
|
|
scope = Devise::Mapping.find_scope!(resource)
|
|
|
|
resource.remember_me!(resource.extend_remember_period)
|
2013-01-20 22:07:51 +03:00
|
|
|
cookies.signed[remember_key(resource, scope)] = remember_cookie_values(resource)
|
2011-02-24 21:55:41 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
# Forgets the given resource by deleting a cookie
|
|
|
|
def forget_me(resource)
|
|
|
|
scope = Devise::Mapping.find_scope!(resource)
|
2011-04-23 08:56:54 +08:00
|
|
|
resource.forget_me!
|
2013-01-20 22:07:51 +03:00
|
|
|
cookies.delete(remember_key(resource, scope), forget_cookie_values(resource))
|
2011-02-24 21:55:41 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
protected
|
|
|
|
|
|
|
|
def forget_cookie_values(resource)
|
2012-02-16 12:26:10 +01:00
|
|
|
Devise::Controllers::Rememberable.cookie_values.merge!(resource.rememberable_options)
|
2011-02-24 21:55:41 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def remember_cookie_values(resource)
|
2014-02-25 22:12:55 +05:30
|
|
|
options = { httponly: true }
|
2011-02-24 21:55:41 +01:00
|
|
|
options.merge!(forget_cookie_values(resource))
|
|
|
|
options.merge!(
|
2014-02-25 22:12:55 +05:30
|
|
|
value: resource.class.serialize_into_cookie(resource),
|
|
|
|
expires: resource.remember_expires_at
|
2011-02-24 21:55:41 +01:00
|
|
|
)
|
|
|
|
end
|
2013-01-20 22:07:51 +03:00
|
|
|
|
|
|
|
def remember_key(resource, scope)
|
|
|
|
resource.rememberable_options.fetch(:key, "remember_#{scope}_token")
|
|
|
|
end
|
2011-02-24 21:55:41 +01:00
|
|
|
end
|
|
|
|
end
|
2013-01-20 22:07:51 +03:00
|
|
|
end
|