Commit d08acee203ac640b806c5ab8ad0556cb22501398
1 parent
c663018a
Exists in
master
and in
28 other branches
ActionItem78: creating a method to change password without passing the old one (…
…for "I forgot my password"). Refactoring the previous one to call this new method after checking the old password. git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@627 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
2 changed files
with
25 additions
and
3 deletions
Show diff stats
app/models/user.rb
| ... | ... | @@ -78,11 +78,16 @@ class User < ActiveRecord::Base |
| 78 | 78 | # * Saves the record unless it is a new one. |
| 79 | 79 | def change_password!(current, new, confirmation) |
| 80 | 80 | raise IncorrectPassword unless self.authenticated?(current) |
| 81 | + self.force_change_password!(new, confirmation) | |
| 82 | + end | |
| 83 | + | |
| 84 | + # Changes the password of a user without asking for the old password. This | |
| 85 | + # method is intended to be used by the "I forgot my password", and must be | |
| 86 | + # used with care. | |
| 87 | + def force_change_password!(new, confirmation) | |
| 81 | 88 | self.password = new |
| 82 | 89 | self.password_confirmation = confirmation |
| 83 | - unless new_record? | |
| 84 | - save! | |
| 85 | - end | |
| 90 | + save! unless new_record? | |
| 86 | 91 | end |
| 87 | 92 | |
| 88 | 93 | protected | ... | ... |
test/unit/user_test.rb
| ... | ... | @@ -124,6 +124,23 @@ class UserTest < Test::Unit::TestCase |
| 124 | 124 | assert user.authenticated?('test') |
| 125 | 125 | end |
| 126 | 126 | |
| 127 | + should 'require matching confirmation when changing password by force' do | |
| 128 | + user = User.create!(:login => 'changetest', :password => 'test', :password_confirmation => 'test', :email => 'changetest@example.com') | |
| 129 | + assert_raise ActiveRecord::RecordInvalid do | |
| 130 | + user.force_change_password!('newpass', 'newpasswrong') | |
| 131 | + end | |
| 132 | + assert !user.authenticated?('newpass') | |
| 133 | + assert user.authenticated?('test') | |
| 134 | + end | |
| 135 | + | |
| 136 | + should 'be able to force password change' do | |
| 137 | + user = User.create!(:login => 'changetest', :password => 'test', :password_confirmation => 'test', :email => 'changetest@example.com') | |
| 138 | + assert_nothing_raised do | |
| 139 | + user.force_change_password!('newpass', 'newpass') | |
| 140 | + end | |
| 141 | + assert user.authenticated?('newpass') | |
| 142 | + end | |
| 143 | + | |
| 127 | 144 | def test_should_create_person_when_creating_user |
| 128 | 145 | count = Person.count |
| 129 | 146 | assert !Person.find_by_identifier('lalala') | ... | ... |