feat(router): prevent redirection from public landing pages on session expiration

This commit is contained in:
Torsten Schulz (local)
2026-08-28 13:37:01 +02:00
parent db485b7acf
commit 2515354386
3 changed files with 11 additions and 3 deletions

View File

@@ -43,6 +43,12 @@ const router = createRouter({
});
router.beforeEach(async (to, from, next) => {
// These are public entry pages. They must never be redirected because a
// persisted login has expired while the application is starting up.
if (to.meta?.publicLanding) {
return next();
}
if (to.matched.some(record => record.meta.requiresAuth)) {
if (!store.getters.isLoggedIn) {
return next('/');

View File

@@ -278,13 +278,13 @@ const store = createStore({
}
await dispatch('loadMenu');
},
logout({ commit }) {
logout({ commit }, { redirectToHome = true } = {}) {
commit('clearSocket');
commit('clearDaemonSocket');
commit('dologout');
// Öffentliche SEO-Landingpages müssen auch dann an ihrer URL bleiben,
// wenn eine gespeicherte Sitzung abgelaufen ist und per 401 zurückgesetzt wird.
if (!router.currentRoute.value.meta?.publicLanding) {
if (redirectToHome && !router.currentRoute.value.meta?.publicLanding) {
router.push('/');
}
},

View File

@@ -32,7 +32,9 @@ apiClient.interceptors.response.use(response => {
return response;
}, error => {
if (error.response && error.response.status === 401) {
store.dispatch('logout');
// A failed background request may clear a stale browser session, but
// it must not replace the visitor's current public landing URL.
store.dispatch('logout', { redirectToHome: false });
}
return Promise.reject(error);
});