diff --git a/app/controllers/confirmations_controller.rb b/app/controllers/confirmations_controller.rb index a4019983e97..e22b1c127b8 100644 --- a/app/controllers/confirmations_controller.rb +++ b/app/controllers/confirmations_controller.rb @@ -34,12 +34,16 @@ def confirm user.save! cookies.delete :_osm_anonymous_notes_count referer = safe_referer(params[:referer]) if params[:referer] + # Restore referer from session if not in params + referer ||= session[:referer] pending_user = session.delete(:pending_user) if user.id == pending_user session[:user] = user.id session[:fingerprint] = user.fingerprint + # Clear the stored referer from session + session.delete(:referer) redirect_to referer || welcome_path else @@ -60,11 +64,14 @@ def confirm_resend if user.nil? || user.id != session[:pending_user] flash[:error] = t ".failure", :name => params[:display_name] else - UserMailer.signup_confirm(user, user.generate_token_for(:new_user)).deliver_later + # Preserve referer from session when resending confirmation + referer = session[:referer] + UserMailer.signup_confirm(user, user.generate_token_for(:new_user), referer).deliver_later flash[:notice] = { :partial => "confirmations/resend_success_flash", :locals => { :email => user.email, :sender => Settings.email_from } } end - redirect_to login_path + # Preserve referer when redirecting back to login + redirect_to login_path(:referer => session[:referer]) end def confirm_email diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 6e28093c613..efc05ea5d89 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -21,6 +21,9 @@ def new @safe_referer = referer @safe_referer = nil if referer != params[:referer] + # Store referer in session to preserve OAuth flow through signup/confirmation + session[:referer] = referer if referer + parse_oauth_referer referer end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 29fae6491fc..20725855b1d 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -33,7 +33,10 @@ def show def new @title = t ".title" - @referer = safe_referer(params[:referer]) + @referer = safe_referer(params[:referer]) || session[:referer] + + # Store referer in session to preserve through signup flow + session[:referer] = @referer if @referer parse_oauth_referer @referer @@ -84,12 +87,15 @@ def create flash[:matomo_goal] = Settings.matomo["goals"]["signup"] if defined?(Settings.matomo) referer = welcome_path(welcome_options(params[:referer])) + email_referer = session[:referer] || params[:referer] + email_referer_options = welcome_options(email_referer) + email_referer = email_referer_options ? welcome_path(email_referer_options) : email_referer if current_user.status == "active" successful_login(current_user, referer) else session[:pending_user] = current_user.id - UserMailer.signup_confirm(current_user, current_user.generate_token_for(:new_user), referer).deliver_later + UserMailer.signup_confirm(current_user, current_user.generate_token_for(:new_user), email_referer).deliver_later redirect_to :controller => :confirmations, :action => :confirm, :display_name => current_user.display_name end else