From a949f1e3aed45b89e8a8a9caa6f486c858f87acf Mon Sep 17 00:00:00 2001 From: Rosa Gutierrez Date: Tue, 27 Jan 2026 09:32:15 +0100 Subject: [PATCH] Clear offline cache when logging out Adds a logout Stimulus controller that sends a message to the service worker to clear all cached content when the user logs out. This ensures that cached data from one user isn't accessible after logout. The implementation: - Adds logout_controller.js that posts { action: "clearCache" } to the service worker via postMessage - Updates logout buttons to use the controller on form submission Also fixes data-turbo placement: moved from button to form element where it actually takes effect for disabling Turbo Drive form submissions. Co-Authored-By: Claude Opus 4.5 --- Gemfile.lock | 2 +- Gemfile.saas.lock | 2 +- app/javascript/controllers/logout_controller.js | 8 ++++++++ app/views/my/menus/_settings.html.erb | 2 +- app/views/users/show.html.erb | 2 +- 5 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 app/javascript/controllers/logout_controller.js diff --git a/Gemfile.lock b/Gemfile.lock index a710d0f9e..a17769c07 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -13,7 +13,7 @@ GIT GIT remote: https://github.com/hotwired/turbo-rails.git - revision: 49be3f2d43edeeedad48cb492b35242fdb27af74 + revision: 45a2a40be0a677808a3a269311f1b5abaa3b30ba branch: offline-cache specs: turbo-rails (2.0.21) diff --git a/Gemfile.saas.lock b/Gemfile.saas.lock index cec5be07b..03c8e9141 100644 --- a/Gemfile.saas.lock +++ b/Gemfile.saas.lock @@ -62,7 +62,7 @@ GIT GIT remote: https://github.com/hotwired/turbo-rails.git - revision: 49be3f2d43edeeedad48cb492b35242fdb27af74 + revision: 45a2a40be0a677808a3a269311f1b5abaa3b30ba branch: offline-cache specs: turbo-rails (2.0.21) diff --git a/app/javascript/controllers/logout_controller.js b/app/javascript/controllers/logout_controller.js new file mode 100644 index 000000000..bc0511a7f --- /dev/null +++ b/app/javascript/controllers/logout_controller.js @@ -0,0 +1,8 @@ +import { Controller } from "@hotwired/stimulus" + +export default class extends Controller { + async clearCache() { + const registration = await navigator.serviceWorker?.ready + registration?.active?.postMessage({ action: "clearCache" }) + } +} diff --git a/app/views/my/menus/_settings.html.erb b/app/views/my/menus/_settings.html.erb index d1251b7c0..6b711544b 100644 --- a/app/views/my/menus/_settings.html.erb +++ b/app/views/my/menus/_settings.html.erb @@ -6,7 +6,7 @@ <%= tag.li class: "popup__item", data: { filter_target: "item", navigable_list_target: "item" } do %> <%= icon_tag "logout", class: "popup__icon" %> - <%= button_to session_path(script_name: nil), method: :delete, class: "popup__btn btn", data: { turbo: false } do %> + <%= button_to session_path(script_name: nil), method: :delete, class: "popup__btn btn", form: { data: { turbo: false, controller: "logout", action: "submit->logout#clearCache" } } do %> Sign out <% end %> <% end %> diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index 58068d2d6..a285a4f5a 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -41,7 +41,7 @@ <% if Current.user == @user %> - <%= button_to session_path(script_name: nil), method: :delete, class: "btn txt-x-small center", data: { turbo: false } do %> + <%= button_to session_path(script_name: nil), method: :delete, class: "btn txt-x-small center", form: { data: { turbo: false, controller: "logout", action: "submit->logout#clearCache" } } do %> Sign out of Fizzy on this device <% end %> <% end %>