Use ActiveModel's to_key instead of id.

Signed-off-by: José Valim <jose.valim@gmail.com>
This commit is contained in:
Sean Cribbs
2010-10-03 13:37:40 -04:00
committed by José Valim
parent b4a99f6698
commit 9f032350e3
3 changed files with 13 additions and 13 deletions

View File

@@ -100,12 +100,12 @@ module Devise
module ClassMethods
# Create the cookie key using the record id and remember_token
def serialize_into_cookie(record)
[record.id, record.rememberable_value]
[record.to_key, record.rememberable_value]
end
# Recreate the user based on the stored cookie
def serialize_from_cookie(id, remember_token)
record = find(:first, :conditions => { :id => id })
record = find(:first, :conditions => { :id => id.first })
record if record && record.rememberable_value == remember_token && !record.remember_expired?
end

View File

@@ -15,20 +15,20 @@ end
class Warden::SessionSerializer
def serialize(record)
[record.class.name, record.id, record.authenticatable_salt]
[record.class.name, record.to_key, record.authenticatable_salt]
end
def deserialize(keys)
if keys.size == 2
raise "Devise changed how it stores objects in session. If you are seeing this message, " <<
"you can fix it by changing one character in your cookie secret, forcing all previous " <<
"cookies to expire, or cleaning up your database sessions if you are using a db store."
"you can fix it by changing one character in your cookie secret or cleaning up your " <<
"database sessions if you are using a db store."
end
klass, id, salt = keys
begin
record = klass.constantize.find(:first, :conditions => { :id => id })
record = klass.constantize.find(:first, :conditions => { :id => id.first })
record if record && record.authenticatable_salt == salt
rescue NameError => e
if e.message =~ /uninitialized constant/
@@ -39,4 +39,4 @@ class Warden::SessionSerializer
end
end
end
end
end

View File

@@ -21,12 +21,12 @@ module SharedRememberableTest
end
test 'serialize should return nil if no resource is found' do
assert_nil resource_class.serialize_from_cookie(0, "123")
assert_nil resource_class.serialize_from_cookie([0], "123")
end
test 'remember me return nil if is a valid resource with invalid token' do
resource = create_resource
assert_nil resource_class.serialize_from_cookie(resource.id, "123")
assert_nil resource_class.serialize_from_cookie([resource.id], "123")
end
test 'remember for should fallback to devise remember for default configuration' do
@@ -153,13 +153,13 @@ class RememberableTest < ActiveSupport::TestCase
test 'serialize into cookie' do
admin = create_admin
admin.remember_me!
assert_equal [admin.id, admin.remember_token], Admin.serialize_into_cookie(admin)
assert_equal [admin.to_key, admin.remember_token], Admin.serialize_into_cookie(admin)
end
test 'serialize from cookie' do
admin = create_admin
admin.remember_me!
assert_equal admin, Admin.serialize_from_cookie(admin.id, admin.remember_token)
assert_equal admin, Admin.serialize_from_cookie(admin.to_key, admin.remember_token)
end
test 'if remember_across_browsers is true, remember_me! should create a new token if no token exists' do
@@ -260,12 +260,12 @@ class WithSaltRememberableTest < ActiveSupport::TestCase
test 'serialize into cookie' do
user = create_user
user.remember_me!
assert_equal [user.id, user.authenticatable_salt], User.serialize_into_cookie(user)
assert_equal [user.to_key, user.authenticatable_salt], User.serialize_into_cookie(user)
end
test 'serialize from cookie' do
user = create_user
user.remember_me!
assert_equal user, User.serialize_from_cookie(user.id, user.authenticatable_salt)
assert_equal user, User.serialize_from_cookie(user.to_key, user.authenticatable_salt)
end
end