diff --git a/app/assets/javascripts/discourse/controllers/preferences/email.js.es6 b/app/assets/javascripts/discourse/controllers/preferences/email.js.es6 index ae9c4ed6d..099e4a1e6 100644 --- a/app/assets/javascripts/discourse/controllers/preferences/email.js.es6 +++ b/app/assets/javascripts/discourse/controllers/preferences/email.js.es6 @@ -9,10 +9,10 @@ export default Ember.Controller.extend({ newEmailEmpty: Em.computed.empty('newEmail'), saveDisabled: Em.computed.or('saving', 'newEmailEmpty', 'taken', 'unchanged'), - unchanged: propertyEqual('newEmailLower', 'email'), + unchanged: propertyEqual('newEmailLower', 'currentUser.email'), newEmailLower: function() { - return this.get('newEmail').toLowerCase(); + return this.get('newEmail').toLowerCase().trim(); }.property('newEmail'), saveButtonText: function() { diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index e92b0ede8..3a9f77942 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -483,9 +483,7 @@ class UsersController < ApplicationController return render_json_error(user.errors.full_messages) if user.errors[:email].present? # Raise an error if the email is already in use - if User.find_by_email(lower_email) - raise Discourse::InvalidParameters.new(:email) - end + return render_json_error(I18n.t('change_email.error')) if User.find_by_email(lower_email) email_token = user.email_tokens.create(email: lower_email) Jobs.enqueue( diff --git a/spec/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb index 969e0756d..651bf0308 100644 --- a/spec/controllers/users_controller_spec.rb +++ b/spec/controllers/users_controller_spec.rb @@ -242,11 +242,13 @@ describe UsersController do context 'when the new email address is taken' do let!(:other_user) { Fabricate(:coding_horror) } it 'raises an error' do - expect { xhr :put, :change_email, username: user.username, email: other_user.email }.to raise_error(Discourse::InvalidParameters) + xhr :put, :change_email, username: user.username, email: other_user.email + expect(response).to_not be_success end it 'raises an error if there is whitespace too' do - expect { xhr :put, :change_email, username: user.username, email: other_user.email + ' ' }.to raise_error(Discourse::InvalidParameters) + xhr :put, :change_email, username: user.username, email: other_user.email + ' ' + expect(response).to_not be_success end end @@ -254,7 +256,8 @@ describe UsersController do let!(:other_user) { Fabricate(:user, email: 'case.insensitive@gmail.com')} it 'raises an error' do - expect { xhr :put, :change_email, username: user.username, email: other_user.email.upcase }.to raise_error(Discourse::InvalidParameters) + xhr :put, :change_email, username: user.username, email: other_user.email.upcase + expect(response).to_not be_success end end