Skip to content

Commit e406a98

Browse files
Don't hash invalid passwords twice
1 parent e2242a9 commit e406a98

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

app/controllers/devise/sessions_controller.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class Devise::SessionsController < DeviseController
88

99
# GET /resource/sign_in
1010
def new
11-
self.resource = resource_class.new(sign_in_params)
11+
self.resource = resource_class.new(sign_in_params.except('password'))
1212
clean_up_passwords(resource)
1313
yield resource if block_given?
1414
respond_with(resource, serialize_options(resource))

test/integration/database_authenticatable_test.rb

+23
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,29 @@ class DatabaseAuthenticationTest < Devise::IntegrationTest
7474
assert_not warden.authenticated?(:admin)
7575
end
7676

77+
test 'sign in with invalid credentials should not invoke Devise::Encryptor.digest' do
78+
module ::Devise::Encryptor
79+
class << self
80+
alias original_digest digest
81+
82+
def digest(klass, password)
83+
raise 'Devise::Encryptor.digest should not be called here.'
84+
end
85+
end
86+
end
87+
88+
visit_with_option nil, new_user_session_path
89+
fill_in 'email', with: '[email protected]'
90+
fill_in 'password', with: 'abcdef'
91+
click_button 'Log In'
92+
93+
module ::Devise::Encryptor
94+
class << self
95+
alias digest original_digest
96+
end
97+
end
98+
end
99+
77100
test 'when in paranoid mode and without a valid e-mail' do
78101
swap Devise, paranoid: true do
79102
store_translations :en, devise: { failure: { not_found_in_database: 'Not found in database' } } do

0 commit comments

Comments
 (0)