From 769a1f8551b925b2d61c5cdcec675e6a4911a038 Mon Sep 17 00:00:00 2001 From: Gabriel Torres <127896538+Gabe-Torres@users.noreply.github.com> Date: Thu, 8 May 2025 20:32:49 -0500 Subject: [PATCH 1/2] feat: Add GET route for sign out on static error pages - Add GET route for sign out in devise_scope block in routes - Add sign_out action to sessions controller - Add feature tests for logout on error pages - Remove data-method="delete" from error pages --- app/controllers/users/sessions_controller.rb | 6 +++ config/routes.rb | 4 ++ public/403.html | 2 +- public/404.html | 2 +- public/422.html | 2 +- public/500.html | 2 +- spec/features/error_pages_spec.rb | 49 ++++++++++++++++++++ 7 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 spec/features/error_pages_spec.rb diff --git a/app/controllers/users/sessions_controller.rb b/app/controllers/users/sessions_controller.rb index a17d196660..34175d819d 100644 --- a/app/controllers/users/sessions_controller.rb +++ b/app/controllers/users/sessions_controller.rb @@ -21,6 +21,12 @@ def create UsersRole.set_last_role_for(current_user, @role) end + # GET /resource/sign_out + def sign_out + sign_out(current_user) if user_signed_in? + redirect_to root_path, notice: "Signed out successfully" + end + # DELETE /resource/sign_out # def destroy # super diff --git a/config/routes.rb b/config/routes.rb index 024f8743cc..9e0e4e920d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -14,6 +14,10 @@ def set_up_flipper omniauth_callbacks: 'users/omniauth_callbacks' } + devise_scope :user do + get 'users/sign_out', to: 'users/sessions#sign_out', as: :user_sign_out + end + # # Mount web interface to see delayed job status and queue length. # Visible only to logged in users with the `super_admin` role diff --git a/public/403.html b/public/403.html index 233a2b2e47..634ab0090d 100644 --- a/public/403.html +++ b/public/403.html @@ -34,7 +34,7 @@
diff --git a/public/404.html b/public/404.html index bb6356bebd..4ea354538a 100644 --- a/public/404.html +++ b/public/404.html @@ -35,7 +35,7 @@ diff --git a/public/422.html b/public/422.html index 057cb5032c..0df3724f83 100644 --- a/public/422.html +++ b/public/422.html @@ -33,7 +33,7 @@ diff --git a/public/500.html b/public/500.html index b589b6445c..9d105bc690 100644 --- a/public/500.html +++ b/public/500.html @@ -33,7 +33,7 @@ diff --git a/spec/features/error_pages_spec.rb b/spec/features/error_pages_spec.rb new file mode 100644 index 0000000000..62d9c9e2d1 --- /dev/null +++ b/spec/features/error_pages_spec.rb @@ -0,0 +1,49 @@ +require "rails_helper" + +RSpec.describe "Error Pages", type: :feature do + let(:user) { create(:user) } + + before do + sign_in(user) + end + + context "on 403 error page" do + it "allows user to log out" do + visit "/403" + expect(page).to have_link("Log out") + + click_link "Log out" + expect(page).to have_content("Signed out successfully") + end + end + + context "on 404 error page" do + it "allows user to log out" do + visit "/404" + expect(page).to have_link("Log out") + + click_link "Log out" + expect(page).to have_content("Signed out successfully") + end + end + + context "on 422 error page" do + it "allows user to log out" do + visit "/422" + expect(page).to have_link("Log out") + + click_link "Log out" + expect(page).to have_content("Signed out successfully") + end + end + + context "on 500 error page" do + it "allows user to log out" do + visit "/500" + expect(page).to have_link("Log out") + + click_link "Log out" + expect(page).to have_content("Signed out successfully") + end + end +end From a7522b64803558216d8940fea7f38d7c4f7d5efd Mon Sep 17 00:00:00 2001 From: Gabriel Torres <127896538+Gabe-Torres@users.noreply.github.com> Date: Thu, 8 May 2025 20:50:46 -0500 Subject: [PATCH 2/2] fix: Rename sign_out method to avoid Devise conflict - Rename sign_out method to sign_out_error_page in sessions controller - Update route to use new method name --- app/controllers/users/sessions_controller.rb | 2 +- config/routes.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/users/sessions_controller.rb b/app/controllers/users/sessions_controller.rb index 34175d819d..27e43b93d4 100644 --- a/app/controllers/users/sessions_controller.rb +++ b/app/controllers/users/sessions_controller.rb @@ -22,7 +22,7 @@ def create end # GET /resource/sign_out - def sign_out + def sign_out_error_page sign_out(current_user) if user_signed_in? redirect_to root_path, notice: "Signed out successfully" end diff --git a/config/routes.rb b/config/routes.rb index 9e0e4e920d..b9ed5da084 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -15,7 +15,7 @@ def set_up_flipper } devise_scope :user do - get 'users/sign_out', to: 'users/sessions#sign_out', as: :user_sign_out + get 'users/sign_out', to: 'users/sessions#sign_out_error_page', as: :user_sign_out end #