Adding publicly available methods on Recoverable and Confirmable to retrieve tokens

This commit is contained in:
Steve Slotnick 2013-06-10 19:17:19 -07:00
parent 176158a309
commit 3c9cfa50c0
4 changed files with 50 additions and 5 deletions

View File

@ -106,6 +106,11 @@ module Devise
send_confirmation_instructions
end
end
def confirmation_token!
generate_confirmation_token! if should_generate_confirmation_token?
self.confirmation_token
end
# Overwrites active_for_authentication? for confirmation
# by verifying whether a user is active to sign in or not. If the user
@ -139,6 +144,9 @@ module Devise
end
protected
def should_generate_confirmation_token?
confirmation_token.nil? || confirmation_period_expired?
end
# A callback method used to deliver confirmation
# instructions on creation. This can be overriden

View File

@ -47,7 +47,12 @@ module Devise
generate_reset_password_token! if should_generate_reset_token?
send_devise_notification(:reset_password_instructions)
end
def reset_password_token!
generate_reset_password_token! if should_generate_reset_token?
self.reset_password_token
end
# Checks if the reset password token sent is within the limit time.
# We do this by calculating if the difference between today and the
# sending date does not exceed the confirm in time configured.

View File

@ -294,6 +294,23 @@ class ConfirmableTest < ActiveSupport::TestCase
assert_not_equal user.confirmation_token, old
end
end
test 'should generate a new token when a valid one does not exist' do
swap Devise, :confirm_within => 3.days do
user = create_user
user.update_attribute(:confirmation_sent_at, 4.days.ago)
old = user.confirmation_token
token = user.confirmation_token!
assert_not_equal user.confirmation_token, old
assert_equal user.confirmation_token, token
end
end
test 'should not generate a new token when a valid one exists' do
user = create_user
assert_not_nil user.confirmation_token
assert_equal user.confirmation_token, user.confirmation_token!
end
end
class ReconfirmableTest < ActiveSupport::TestCase

View File

@ -110,7 +110,7 @@ class RecoverableTest < ActiveSupport::TestCase
test 'should find a user to reset his password based on reset_password_token' do
user = create_user
user.send :generate_reset_password_token!
user.reset_password_token!
reset_password_user = User.reset_password_by_token(:reset_password_token => user.reset_password_token)
assert_equal reset_password_user, user
@ -130,7 +130,7 @@ class RecoverableTest < ActiveSupport::TestCase
test 'should return a new record with errors if password is blank' do
user = create_user
user.send :generate_reset_password_token!
user.reset_password_token!
reset_password_user = User.reset_password_by_token(:reset_password_token => user.reset_password_token, :password => '')
assert_not reset_password_user.errors.empty?
@ -140,7 +140,7 @@ class RecoverableTest < ActiveSupport::TestCase
test 'should reset successfully user password given the new password and confirmation' do
user = create_user
old_password = user.password
user.send :generate_reset_password_token!
user.reset_password_token!
User.reset_password_by_token(
:reset_password_token => user.reset_password_token,
@ -179,7 +179,7 @@ class RecoverableTest < ActiveSupport::TestCase
swap Devise, :reset_password_within => 1.hour do
user = create_user
old_password = user.password
user.send :generate_reset_password_token!
user.reset_password_token!
user.reset_password_sent_at = 2.days.ago
user.save!
@ -202,4 +202,19 @@ class RecoverableTest < ActiveSupport::TestCase
:reset_password_token
]
end
test 'should generate a new token when a valid one does not exist' do
user = create_user
assert_nil user.reset_password_token
token = user.reset_password_token!
assert_not_nil user.reset_password_token
end
test 'should not generate a new token when a valid one exists' do
user = create_user
user.send :generate_reset_password_token!
assert_not_nil user.reset_password_token
assert_equal user.reset_password_token, user.reset_password_token!
end
end