diff --git a/src/views/MainContainer.vue b/src/views/MainContainer.vue index e657c80..363fa7b 100644 --- a/src/views/MainContainer.vue +++ b/src/views/MainContainer.vue @@ -49,6 +49,7 @@ export default { // } async beforeRouteEnter(to, from, next) { const loginStore = useLoginStore(); + const relativeReturnTo = `${window.location.pathname}${window.location.search}${window.location.hash}`; if (!getCookie("isLuciaLoggedIn")) { if (getCookie('luciaRefreshToken')) { @@ -61,7 +62,7 @@ export default { next({ path: '/login', query: { - 'return-to': btoa(window.location.href), + 'return-to': btoa(relativeReturnTo), } }); } @@ -69,7 +70,7 @@ export default { next({ path: '/login', query: { - 'return-to': btoa(window.location.href), + 'return-to': btoa(relativeReturnTo), } }); } diff --git a/tests/views/MainContainerGuard.test.js b/tests/views/MainContainerGuard.test.js index 0d22fc0..4f8c31e 100644 --- a/tests/views/MainContainerGuard.test.js +++ b/tests/views/MainContainerGuard.test.js @@ -91,4 +91,15 @@ describe('MainContainer beforeRouteEnter', () => { expect(next).toHaveBeenCalled(); }); + + it('stores a relative return-to path when redirecting to login', async () => { + window.history.replaceState({}, '', '/discover/log/1/map?view=summary#node-2'); + + await callGuard(); + + const redirectArg = next.mock.calls[0][0]; + const returnTo = redirectArg.query['return-to']; + + expect(atob(returnTo)).toBe('/discover/log/1/map?view=summary#node-2'); + }); });