diff --git a/apps/api/config/initializers/admin_cookie.rb b/apps/api/config/initializers/admin_cookie.rb new file mode 100644 index 0000000..b1d33de --- /dev/null +++ b/apps/api/config/initializers/admin_cookie.rb @@ -0,0 +1,20 @@ +# Set a JS-readable cookie when an admin signs in/out. +# Devise's remember_admin_user_token cookie is HttpOnly, +# so the frontend cannot read it. This non-HttpOnly cookie +# lets the frontend show/hide the Admin menu link. + +Rails.application.config.to_prepare do + ApplicationController.class_eval do + after_action :sync_admin_cookie + + private + + def sync_admin_cookie + if current_admin_user + cookies[:is_admin] = { value: "1", httponly: false, same_site: :lax, path: "/" } + elsif cookies[:is_admin] + cookies.delete(:is_admin, path: "/") + end + end + end +end diff --git a/apps/frontend/src/layout/AppLayout.vue b/apps/frontend/src/layout/AppLayout.vue index e8487c1..d5da1be 100644 --- a/apps/frontend/src/layout/AppLayout.vue +++ b/apps/frontend/src/layout/AppLayout.vue @@ -87,7 +87,7 @@ const ui = useUiStore() const { isRetroMode, menuOpen } = storeToRefs(ui) const { toggleMenu, toggleRetroMode } = ui const route = useRoute() -const isAdmin = computed(() => !!getCookie('remember_admin_user_token')) +const isAdmin = computed(() => !!getCookie('is_admin')) watch(() => route.path, () => { ui.closeMenu()