Skip to content

Commit 991c5df

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

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

app/controllers/devise/sessions_controller.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def destroy
3434
protected
3535

3636
def sign_in_params
37-
devise_parameter_sanitizer.sanitize(:sign_in)
37+
devise_parameter_sanitizer.sanitize(:sign_in).except('password')
3838
end
3939

4040
def serialize_options(resource)

lib/devise/parameter_sanitizer.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ module Devise
3636
# end
3737
class ParameterSanitizer
3838
DEFAULT_PERMITTED_ATTRIBUTES = {
39-
sign_in: [:password, :remember_me],
39+
sign_in: [:remember_me],
4040
sign_up: [:password, :password_confirmation],
4141
account_update: [:password, :password_confirmation, :current_password]
4242
}

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)