mirror of
https://github.com/heartcombo/devise.git
synced 2022-11-09 12:18:31 -05:00
Remember token is now properly stored and specified one for each user.
This commit is contained in:
parent
8628cf0d6b
commit
4894059828
5 changed files with 19 additions and 14 deletions
|
@ -2,10 +2,10 @@
|
||||||
# This is done by checking the time frame the user is able to sign in without
|
# This is done by checking the time frame the user is able to sign in without
|
||||||
# confirming it's account. If the user has not confirmed it's account during
|
# confirming it's account. If the user has not confirmed it's account during
|
||||||
# this time frame, he/she will not able to sign in anymore.
|
# this time frame, he/she will not able to sign in anymore.
|
||||||
Warden::Manager.after_set_user do |record, auth, options|
|
Warden::Manager.after_set_user do |record, warden, options|
|
||||||
if record && record.respond_to?(:active?) && !record.active?
|
if record && record.respond_to?(:active?) && !record.active?
|
||||||
scope = options[:scope]
|
scope = options[:scope]
|
||||||
auth.logout(scope)
|
warden.logout(scope)
|
||||||
throw :warden, :scope => scope, :params => { :unconfirmed => true }
|
throw :warden, :scope => scope, :params => { :unconfirmed => true }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,15 +3,17 @@
|
||||||
# that specific user and adds a cookie with this user info to sign in this user
|
# that specific user and adds a cookie with this user info to sign in this user
|
||||||
# automatically without asking for credentials. Refer to rememberable strategy
|
# automatically without asking for credentials. Refer to rememberable strategy
|
||||||
# for more info.
|
# for more info.
|
||||||
Warden::Manager.after_authentication do |record, auth, options|
|
Warden::Manager.after_authentication do |record, warden, options|
|
||||||
scope = options[:scope]
|
scope = options[:scope]
|
||||||
remember_me = auth.params[scope].try(:fetch, :remember_me, nil)
|
remember_me = warden.params[scope].try(:fetch, :remember_me, nil)
|
||||||
|
|
||||||
if Devise::TRUE_VALUES.include?(remember_me) && record.respond_to?(:remember_me!)
|
if Devise::TRUE_VALUES.include?(remember_me) && record.respond_to?(:remember_me!)
|
||||||
record.remember_me!
|
record.remember_me!
|
||||||
auth.cookies['remember_token'] = {
|
|
||||||
|
warden.response.set_cookie "remember_#{scope}_token", {
|
||||||
:value => record.class.serialize_into_cookie(record),
|
:value => record.class.serialize_into_cookie(record),
|
||||||
:expires => record.remember_expires_at
|
:expires => record.remember_expires_at,
|
||||||
|
:path => "/"
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -19,9 +21,9 @@ end
|
||||||
# Before logout hook to forget the user in the given scope, only if rememberable
|
# Before logout hook to forget the user in the given scope, only if rememberable
|
||||||
# is activated for this scope. Also clear remember token to ensure the user
|
# is activated for this scope. Also clear remember token to ensure the user
|
||||||
# won't be remembered again.
|
# won't be remembered again.
|
||||||
Warden::Manager.before_logout do |record, auth, scope|
|
Warden::Manager.before_logout do |record, warden, scope|
|
||||||
if record.respond_to?(:forget_me!)
|
if record.respond_to?(:forget_me!)
|
||||||
record.forget_me!
|
record.forget_me!
|
||||||
auth.cookies.delete('remember_token')
|
warden.response.delete_cookie "remember_#{scope}_token"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Taken from RailsWarden, thanks to Hassox. http://github.com/hassox/rails_warden
|
# Taken from RailsWarden, thanks to Hassox. http://github.com/hassox/rails_warden
|
||||||
module Warden::Mixins::Common
|
module Warden::Mixins::Common
|
||||||
# Gets the rails request object by default if it's available
|
|
||||||
def request
|
def request
|
||||||
return @request if @request
|
return @request if @request
|
||||||
if env['action_controller.rescue.request']
|
if env['action_controller.rescue.request']
|
||||||
|
@ -19,8 +18,12 @@ module Warden::Mixins::Common
|
||||||
raw_session.clear
|
raw_session.clear
|
||||||
end
|
end
|
||||||
|
|
||||||
# Proxy to request cookies
|
def response
|
||||||
def cookies
|
return @response if @response
|
||||||
request.cookies
|
if env['action_controller.rescue.response']
|
||||||
|
@response = env['action_controller.rescue.response']
|
||||||
|
else
|
||||||
|
Rack::Response.new(env)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -26,7 +26,7 @@ module Devise
|
||||||
|
|
||||||
# Accessor for remember cookie
|
# Accessor for remember cookie
|
||||||
def remember_me_cookie
|
def remember_me_cookie
|
||||||
cookies['remember_token']
|
request.cookies["remember_#{mapping.name}_token"]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,7 +6,7 @@ class RememberMeTest < ActionController::IntegrationTest
|
||||||
Devise.remember_for = 1
|
Devise.remember_for = 1
|
||||||
user = create_user
|
user = create_user
|
||||||
user.remember_me!
|
user.remember_me!
|
||||||
cookies['remember_token'] = User.serialize_into_cookie(user) + add_to_token
|
cookies['remember_user_token'] = User.serialize_into_cookie(user) + add_to_token
|
||||||
user
|
user
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue