diff --git a/app/controllers/candidate_interface/errors_controller.rb b/app/controllers/candidate_interface/errors_controller.rb
index e532347ceb1..c12a2865da5 100644
--- a/app/controllers/candidate_interface/errors_controller.rb
+++ b/app/controllers/candidate_interface/errors_controller.rb
@@ -2,6 +2,7 @@ module CandidateInterface
class ErrorsController < CandidateInterfaceController
skip_before_action :verify_authenticity_token
skip_before_action :authenticate_candidate!
+ allow_unauthenticated_access only: [:wrong_email_address]
def account_locked
render 'errors/account_locked', status: :forbidden, formats: :html
@@ -10,5 +11,9 @@ def account_locked
def not_found
render 'errors/not_found', status: :not_found, formats: :html
end
+
+ def wrong_email_address
+ render 'errors/wrong_email_address_used_for_candidate', status: :forbidden, formats: :html
+ end
end
end
diff --git a/app/controllers/one_login_controller.rb b/app/controllers/one_login_controller.rb
index f704546f1de..6e903567f7f 100644
--- a/app/controllers/one_login_controller.rb
+++ b/app/controllers/one_login_controller.rb
@@ -74,7 +74,7 @@ def sign_out
def sign_out_complete
if session[:session_error_id].present?
reset_session
- redirect_to internal_server_error_path
+ redirect_to candidate_interface_wrong_email_address_path
else
redirect_to candidate_interface_create_account_or_sign_in_path
end
diff --git a/app/views/errors/wrong_email_address_used_for_candidate.html.erb b/app/views/errors/wrong_email_address_used_for_candidate.html.erb
new file mode 100644
index 00000000000..7ea84edb915
--- /dev/null
+++ b/app/views/errors/wrong_email_address_used_for_candidate.html.erb
@@ -0,0 +1,23 @@
+<%= content_for :title, t('page_titles.there_is_a_problem') %>
+
+
+
+
<%= t('page_titles.there_is_a_problem') %>
+
+ <%= t(
+ '.body_html',
+ button_link: render(
+ ButtonToAsLinkComponent.new(
+ name: t('.sign_in'),
+ path: OneLogin.bypass? ? '/auth/one-login-developer' : '/auth/one_login',
+ ),
+ ),
+ ) %>
+
+
+
+ If you have any questions, please email us at
+ <%= govuk_mail_to 'becomingateacher@digital.education.gov.uk' %>
+
+
+
diff --git a/config/locales/candidate_interface/errors.yml b/config/locales/candidate_interface/errors.yml
new file mode 100644
index 00000000000..4525bfb973c
--- /dev/null
+++ b/config/locales/candidate_interface/errors.yml
@@ -0,0 +1,5 @@
+en:
+ errors:
+ wrong_email_address_used_for_candidate:
+ body_html: You should use the email address you use for GOV.UK One Login to %{button_link}.
+ sign_in: sign in to Apply for teacher training
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 30fdf91adf2..8c5729f1971 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -102,6 +102,7 @@ en:
get_your_details_back: Get your details back
dismiss: Dismiss
page_titles:
+ there_is_a_problem: There is a problem
account_recovery: Enter the code we sent to %{email}
account_recovery_resend_email: Enter the new code we sent to %{email}
account_recovery_request: Get your account details back
diff --git a/config/routes/candidate.rb b/config/routes/candidate.rb
index 6c5341ff726..32afc4e603f 100644
--- a/config/routes/candidate.rb
+++ b/config/routes/candidate.rb
@@ -608,6 +608,7 @@
end
get '/account-locked', to: 'errors#account_locked'
+ get '/wrong-email-address', to: 'errors#wrong_email_address'
get '/about-the-teacher-training-application-process', to: 'guidance#index', as: :guidance
diff --git a/spec/requests/one_login_controller_spec.rb b/spec/requests/one_login_controller_spec.rb
index 1c578387c55..b63ed16946c 100644
--- a/spec/requests/one_login_controller_spec.rb
+++ b/spec/requests/one_login_controller_spec.rb
@@ -199,7 +199,7 @@
"One login session error, check session_error record #{SessionError.last.id}",
level: :error,
)
- expect(response).to redirect_to(internal_server_error_path)
+ expect(response).to redirect_to(candidate_interface_wrong_email_address_path)
end
end