From cde2229e598d0b91e75c039ead4311fa6a89a2e9 Mon Sep 17 00:00:00 2001 From: Gabe Martin-Dempesy Date: Sun, 18 Nov 2012 15:08:57 -0800 Subject: [PATCH 1/3] Support alternate sign in error message when email record does not exist By default, the nonexistent error is still identical to the :invalid message, and must be customized by the developer to implement. --- config/locales/en.yml | 1 + lib/devise/strategies/database_authenticatable.rb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index a533f90ca2..1c1cb30fe7 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -18,6 +18,7 @@ en: unauthenticated: 'You need to sign in or sign up before continuing.' unconfirmed: 'You have to confirm your account before continuing.' locked: 'Your account is locked.' + nonexitent: 'Invalid email or password.' invalid: 'Invalid email or password.' invalid_token: 'Invalid authentication token.' timeout: 'Your session expired, please sign in again to continue.' diff --git a/lib/devise/strategies/database_authenticatable.rb b/lib/devise/strategies/database_authenticatable.rb index 4552d7a396..f024bfcd92 100644 --- a/lib/devise/strategies/database_authenticatable.rb +++ b/lib/devise/strategies/database_authenticatable.rb @@ -6,7 +6,7 @@ module Strategies class DatabaseAuthenticatable < Authenticatable def authenticate! resource = valid_password? && mapping.to.find_for_database_authentication(authentication_hash) - return fail(:invalid) unless resource + return fail(:nonexitent) unless resource if validate(resource){ resource.valid_password?(password) } resource.after_database_authentication From ffab77c35e3392500ea03ac6ed9669d0ab4ef612 Mon Sep 17 00:00:00 2001 From: Gabe Martin-Dempesy Date: Sun, 18 Nov 2012 15:19:15 -0800 Subject: [PATCH 2/3] Fix typo on nonexistent error --- config/locales/en.yml | 2 +- lib/devise/strategies/database_authenticatable.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 1c1cb30fe7..73c6bd5a7b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -18,7 +18,7 @@ en: unauthenticated: 'You need to sign in or sign up before continuing.' unconfirmed: 'You have to confirm your account before continuing.' locked: 'Your account is locked.' - nonexitent: 'Invalid email or password.' + nonexistent: 'Invalid email or password.' invalid: 'Invalid email or password.' invalid_token: 'Invalid authentication token.' timeout: 'Your session expired, please sign in again to continue.' diff --git a/lib/devise/strategies/database_authenticatable.rb b/lib/devise/strategies/database_authenticatable.rb index f024bfcd92..831e5f5609 100644 --- a/lib/devise/strategies/database_authenticatable.rb +++ b/lib/devise/strategies/database_authenticatable.rb @@ -6,7 +6,7 @@ module Strategies class DatabaseAuthenticatable < Authenticatable def authenticate! resource = valid_password? && mapping.to.find_for_database_authentication(authentication_hash) - return fail(:nonexitent) unless resource + return fail(:nonexistent) unless resource if validate(resource){ resource.valid_password?(password) } resource.after_database_authentication From 130d68419857f3ba0cdc75fafbf65e6e96948797 Mon Sep 17 00:00:00 2001 From: Gabe Martin-Dempesy Date: Mon, 19 Nov 2012 15:49:21 -0800 Subject: [PATCH 3/3] Change failure key for missing database resource to :invalid_email --- config/locales/en.yml | 2 +- lib/devise/strategies/database_authenticatable.rb | 2 +- test/integration/database_authenticatable_test.rb | 12 +++++++----- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 73c6bd5a7b..824c4ce8bb 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -18,8 +18,8 @@ en: unauthenticated: 'You need to sign in or sign up before continuing.' unconfirmed: 'You have to confirm your account before continuing.' locked: 'Your account is locked.' - nonexistent: 'Invalid email or password.' invalid: 'Invalid email or password.' + invalid_email: 'Invalid email or password.' invalid_token: 'Invalid authentication token.' timeout: 'Your session expired, please sign in again to continue.' inactive: 'Your account was not activated yet.' diff --git a/lib/devise/strategies/database_authenticatable.rb b/lib/devise/strategies/database_authenticatable.rb index 831e5f5609..78d9581211 100644 --- a/lib/devise/strategies/database_authenticatable.rb +++ b/lib/devise/strategies/database_authenticatable.rb @@ -6,7 +6,7 @@ module Strategies class DatabaseAuthenticatable < Authenticatable def authenticate! resource = valid_password? && mapping.to.find_for_database_authentication(authentication_hash) - return fail(:nonexistent) unless resource + return fail(:invalid_email) unless resource if validate(resource){ resource.valid_password?(password) } resource.after_database_authentication diff --git a/test/integration/database_authenticatable_test.rb b/test/integration/database_authenticatable_test.rb index 51074d3ab6..39c2e2cda3 100644 --- a/test/integration/database_authenticatable_test.rb +++ b/test/integration/database_authenticatable_test.rb @@ -53,12 +53,14 @@ class DatabaseAuthenticationTest < ActionController::IntegrationTest end test 'sign in with invalid email should return to sign in form with error message' do - sign_in_as_admin do - fill_in 'email', :with => 'wrongemail@test.com' - end + store_translations :en, :devise => { :failure => { :admin => { :invalid_email => 'Invalid email address' } } } do + sign_in_as_admin do + fill_in 'email', :with => 'wrongemail@test.com' + end - assert_contain 'Invalid email or password' - assert_not warden.authenticated?(:admin) + assert_contain 'Invalid email address' + assert_not warden.authenticated?(:admin) + end end test 'sign in with invalid pasword should return to sign in form with error message' do