mirror of
https://github.com/heartcombo/devise.git
synced 2022-11-09 12:18:31 -05:00
custom domain cookie support
Signed-off-by: José Valim <jose.valim@gmail.com>
This commit is contained in:
parent
f1bbce58f3
commit
21129ae38c
4 changed files with 26 additions and 5 deletions
|
@ -47,6 +47,10 @@ module Devise
|
||||||
:bcrypt => 60
|
:bcrypt => 60
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Custom domain for cookies. Not set by default
|
||||||
|
mattr_accessor :cookie_domain
|
||||||
|
@@cookie_domain = false
|
||||||
|
|
||||||
# Used to encrypt password. Please generate one with rake secret.
|
# Used to encrypt password. Please generate one with rake secret.
|
||||||
mattr_accessor :pepper
|
mattr_accessor :pepper
|
||||||
@@pepper = nil
|
@@pepper = nil
|
||||||
|
|
|
@ -2,9 +2,10 @@
|
||||||
# to forget_me! Also clear remember token to ensure the user won't be
|
# to forget_me! Also clear remember token to ensure the user won't be
|
||||||
# remembered again. Notice that we forget the user unless the record is frozen.
|
# remembered again. Notice that we forget the user unless the record is frozen.
|
||||||
# This avoids forgetting deleted users.
|
# This avoids forgetting deleted users.
|
||||||
Warden::Manager.before_logout do |record, warden, scope|
|
Warden::Manager.before_logout do |record, warden, options|
|
||||||
if record.respond_to?(:forget_me!)
|
if record.respond_to?(:forget_me!)
|
||||||
record.forget_me! unless record.frozen?
|
record.forget_me! unless record.frozen?
|
||||||
warden.cookies.delete "remember_#{scope}_token"
|
|
||||||
|
warden.cookies.delete("remember_#{options[:scope].to_s}_token", :domain => record.cookie_domain, :path => "/")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,11 +11,17 @@ module Devise
|
||||||
if succeeded? && resource.respond_to?(:remember_me!) && remember_me?
|
if succeeded? && resource.respond_to?(:remember_me!) && remember_me?
|
||||||
resource.remember_me!
|
resource.remember_me!
|
||||||
|
|
||||||
cookies.signed["remember_#{scope}_token"] = {
|
conf = {
|
||||||
:value => resource.class.serialize_into_cookie(resource),
|
:value => resource.class.serialize_into_cookie(resource),
|
||||||
:expires => resource.remember_expires_at,
|
:expires => resource.remember_expires_at,
|
||||||
:path => "/"
|
:path => "/"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
conf[:domain] = resource.cookie_domain if resource.cookie_domain?
|
||||||
|
|
||||||
|
Warden::Manager.after_set_user do |record, warden, options|
|
||||||
|
warden.cookies["remember_#{options[:scope]}_token"] = conf
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -28,4 +34,5 @@ module Devise
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Devise::Strategies::Authenticatable.send :include, Devise::Hooks::Rememberable
|
Devise::Strategies::Authenticatable.send :include, Devise::Hooks::Rememberable
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,14 @@ module Devise
|
||||||
remember_created_at + self.class.remember_for
|
remember_created_at + self.class.remember_for
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def cookie_domain
|
||||||
|
self.class.cookie_domain
|
||||||
|
end
|
||||||
|
|
||||||
|
def cookie_domain?
|
||||||
|
self.class.cookie_domain != false
|
||||||
|
end
|
||||||
|
|
||||||
module ClassMethods
|
module ClassMethods
|
||||||
# Create the cookie key using the record id and remember_token
|
# Create the cookie key using the record id and remember_token
|
||||||
def serialize_into_cookie(record)
|
def serialize_into_cookie(record)
|
||||||
|
@ -79,6 +87,7 @@ module Devise
|
||||||
end
|
end
|
||||||
|
|
||||||
Devise::Models.config(self, :remember_for)
|
Devise::Models.config(self, :remember_for)
|
||||||
|
Devise::Models.config(self, :cookie_domain)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue