Skip to content

Commit b0b4a7a

Browse files
Remove legacy salt in password setter
1 parent 15c121c commit b0b4a7a

2 files changed

Lines changed: 39 additions & 0 deletions

File tree

lib/devise-argon2/model.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ def valid_password?(password)
3838
is_valid
3939
end
4040

41+
def password=(new_password)
42+
self.password_salt = nil if migrate_hash_from_devise_argon2_v1?
43+
super
44+
end
45+
4146
protected
4247

4348
def password_digest(password)

spec/devise-argon2_spec.rb

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,4 +302,38 @@ def work_factors(hash)
302302
)
303303
end
304304
end
305+
306+
describe 'password reset' do
307+
NEW_PASSWORD = 'new password'
308+
309+
shared_examples 'ways of resetting the password' do
310+
it 'can be done via password_reset' do
311+
user.reset_password(NEW_PASSWORD, NEW_PASSWORD)
312+
expect(user.valid_password?(NEW_PASSWORD)).to be true
313+
end
314+
315+
it 'can be done via password=' do
316+
user.password = NEW_PASSWORD
317+
expect(user.valid_password?(NEW_PASSWORD)).to be true
318+
end
319+
end
320+
321+
context 'encrypted_password is hashed with the current version of devise-argon2' do
322+
323+
end
324+
325+
context 'encrypted_password is hashed with version 1 of devise-argon2' do
326+
let(:user) { OldUser.new(password: CORRECT_PASSWORD) }
327+
328+
before do
329+
Devise.argon2_options.merge!({ migrate_from_devise_argon2_v1: true })
330+
user.password_salt = 'devise-argon2 v1 salt'
331+
user.encrypted_password = ::Argon2::Password.create(
332+
"#{CORRECT_PASSWORD}#{user.password_salt}#{Devise.pepper}"
333+
)
334+
end
335+
336+
include_examples 'ways of resetting the password'
337+
end
338+
end
305339
end

0 commit comments

Comments
 (0)