95 lines
2.7 KiB
Ruby
95 lines
2.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class Users::RegistrationsController < Devise::RegistrationsController
|
|
include ProcedureContextConcern
|
|
|
|
# before_action :configure_sign_up_params, only: [:create]
|
|
# before_action :configure_account_update_params, only: [:update]
|
|
before_action :restore_procedure_context, only: [:new, :create]
|
|
|
|
layout 'login', only: [:new, :create]
|
|
|
|
# GET /resource/sign_up
|
|
def new
|
|
# Allow pre-filling the user email from a query parameter
|
|
build_resource({ email: sign_up_params[:email] })
|
|
|
|
if block_given?
|
|
yield resource
|
|
end
|
|
|
|
respond_with resource
|
|
end
|
|
|
|
# POST /resource
|
|
def create
|
|
# We may need the confirmation mailer to access the current procedure.
|
|
# But there's no easy way to pass an argument to the mailer through
|
|
# all Devise code.
|
|
# So instead we use a per-request global variable.
|
|
CurrentConfirmation.procedure_after_confirmation = @procedure
|
|
CurrentConfirmation.prefill_token = @prefill_token
|
|
|
|
# Handle existing user trying to sign up again
|
|
existing_user = User.find_by(email: params[:user][:email])
|
|
if existing_user.present?
|
|
if existing_user.confirmed?
|
|
UserMailer.new_account_warning(existing_user, @procedure).deliver_later
|
|
else
|
|
existing_user.resend_confirmation_instructions
|
|
end
|
|
return redirect_to after_inactive_sign_up_path_for(existing_user)
|
|
end
|
|
|
|
super do
|
|
resource.update_preferred_domain(Current.host) if resource.valid? && helpers.switch_domain_enabled?(request)
|
|
end
|
|
end
|
|
|
|
# GET /resource/edit
|
|
# def edit
|
|
# super
|
|
# end
|
|
|
|
# PUT /resource
|
|
# def update
|
|
# super
|
|
# end
|
|
|
|
# DELETE /resource
|
|
# def destroy
|
|
# super
|
|
# end
|
|
|
|
# GET /resource/cancel
|
|
# Forces the session data which is usually expired after sign
|
|
# in to be expired now. This is useful if the user wants to
|
|
# cancel oauth signing in/up in the middle of the process,
|
|
# removing all OAuth session data.
|
|
# def cancel
|
|
# super
|
|
# end
|
|
|
|
# protected
|
|
|
|
# You can put the params you want to permit in the empty array.
|
|
# def configure_sign_up_params
|
|
# devise_parameter_sanitizer.for(:sign_up) << :attribute
|
|
# end
|
|
|
|
# You can put the params you want to permit in the empty array.
|
|
# def configure_account_update_params
|
|
# devise_parameter_sanitizer.for(:account_update) << :attribute
|
|
# end
|
|
|
|
# The path used after sign up.
|
|
# def after_sign_up_path_for(resource)
|
|
# super(resource)
|
|
# end
|
|
|
|
# The path used after sign up for inactive accounts.
|
|
def after_inactive_sign_up_path_for(resource)
|
|
flash.discard(:notice) # Remove devise's default message (as we have a custom page to explain it)
|
|
new_confirmation_path(resource, :user => { email: resource.email })
|
|
end
|
|
end
|