FEATURE: Let users update their emails before confirming

This allows users who entered a typo or invalid email address when
signing up an opportunity to fix it and resending the confirmation
email to that address.
This commit is contained in:
Robin Ward
2017-04-05 16:14:22 -04:00
parent d1c79372d7
commit 40ab2e5667
19 changed files with 255 additions and 30 deletions

View File

@@ -26,6 +26,7 @@ class UsersController < ApplicationController
:activate_account,
:perform_account_activation,
:send_activation_email,
:update_activation_email,
:password_reset,
:confirm_email_token,
:admin_login,
@@ -569,6 +570,28 @@ class UsersController < ApplicationController
render layout: 'no_ember'
end
def update_activation_email
RateLimiter.new(nil, "activate-edit-email-hr-#{request.remote_ip}", 5, 1.hour).performed!
@user = User.find_by_username_or_email(params[:username])
raise Discourse::InvalidAccess.new unless @user.present?
raise Discourse::InvalidAccess.new if @user.active?
raise Discourse::InvalidAccess.new if current_user.present?
raise Discourse::InvalidAccess.new unless @user.confirm_password?(params[:password])
User.transaction do
@user.email = params[:email]
if @user.save
@user.email_tokens.create(email: @user.email)
enqueue_activation_email
render json: success_json
else
render_json_error(@user)
end
end
end
def send_activation_email
if current_user.blank? || !current_user.staff?
RateLimiter.new(nil, "activate-hr-#{request.remote_ip}", 30, 1.hour).performed!