diff --git a/src/App.vue b/src/App.vue index 95966e80c5a44d291435c2dad5841c3c49efca65..af053b2d87e67b5a9deebc44bcec4e30cd73fdf9 100644 --- a/src/App.vue +++ b/src/App.vue @@ -11,6 +11,7 @@ <div class="menu container"> <div class="ui inverted icon menu"> <router-link + :is="isSharedProject ? 'span' : 'router-link'" :to="isSharedProject ? '' : '/'" :class="['header item', {disable: isSharedProject}]" > @@ -122,7 +123,7 @@ </a> <router-link v-else-if="!user && !SSO_LOGIN_URL" - to="/connexion/" + :to="{ name : 'login' }" class="item" > Se connecter @@ -175,7 +176,7 @@ </a> <router-link v-else-if="!user && !SSO_LOGIN_URL" - to="/connexion/" + :to="{ name : 'login' }" class="item" > Se Connecter diff --git a/src/router/index.js b/src/router/index.js index df9c27dc70578dbd245456ae9e4076e39a2e43c1..7a050554cf7ae6be70b9b3ebdf60d7a15f60fa12 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -4,10 +4,6 @@ import Projects from '../views/Projects.vue'; Vue.use(VueRouter); -//* store initial route before redirect to login page -//* in order to turn back to shared project afterwards (not memorized in router history at page load) -window.initialRoute = window.location.href; - let projectBase = 'projet'; if (window.location.pathname.includes('projet-partage')) { projectBase = 'projet-partage'; @@ -20,7 +16,7 @@ const routes = [ component: Projects }, { - path: '/connexion/', + path: `${projectBase === 'projet' ? '': '/' + projectBase + '/:slug'}/connexion/`, name: 'login', component: () => import('../views/registration/Login.vue') }, diff --git a/src/store/index.js b/src/store/index.js index 4631cbb4fd7dd17fe79e391a31767ed1773391e1..f4ed8a513c177a8cfae2da3415c32bde963dfcef 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -138,21 +138,8 @@ export default new Vuex.Store({ }) .then((response) => { if (response.status === 200 && response.data) { - // * use stored previous route to go back after login if page not open on login at first - let routerHistory = ''; - if (router.options.routerHistory[0] !== undefined) { - routerHistory = router.options.routerHistory[0].name !== 'login' ? router.options.routerHistory : '/'; - } else { - routerHistory = '/'; - } commit('SET_USER', response.data.user); - - if (routerHistory === '/' && window.initialRoute.includes('projet-partage')) { - window.location.replace(window.initialRoute); - } else { // ToDo : not working at page load, routerHistory filled afterwards, could try history.back() - router.push(routerHistory[routerHistory.length - 1] || '/'); - } - + dispatch('REDIRECT_AFTER_LOGIN'); dispatch('GET_USER_LEVEL_PROJECTS'); dispatch('GET_USER_LEVEL_PERMISSIONS'); return response.status; @@ -165,6 +152,23 @@ export default new Vuex.Store({ } }, + REDIRECT_AFTER_LOGIN() { + // * use stored previous route to go back after login if page not open on login at first + let routerHistory = ''; + if (router.options.routerHistory[0] !== undefined) { + routerHistory = router.options.routerHistory[0].name !== 'login' ? router.options.routerHistory : '/'; + } else { + routerHistory = '/'; + } + + const slug = router.history.current.params.slug; + if (slug) { + router.push({ name: 'project_detail', params: { slug } }); + } else { //* not working at page load, routerHistory filled afterwards, could try history.back() + router.push(routerHistory[routerHistory.length - 1] || '/'); + } + }, + USER_INFO({ state, commit }) { if (!state.user) { axios @@ -178,7 +182,15 @@ export default new Vuex.Store({ .catch(() => { //* if an url to redirect to an external authentification system is present, do not redirect to the login page if (!state.configuration.VUE_APP_LOGIN_URL) { - router.push({ name: 'login' }); + const url = window.location.href; + console.log({ url }); + console.log(url.includes('projet-partage')); + if (url.includes('projet-partage')) { + const slug = url.split('projet-partage/')[1]; + router.push({ name: 'login', params: { slug } }); + } else { + router.push({ name: 'login' }); + } } }); } diff --git a/src/views/registration/Login.vue b/src/views/registration/Login.vue index 77999234edfc163742fdb7e3e131f7416b566ce8..1d1e7b2ec818b69b6dfc62296761cdf443be85d0 100644 --- a/src/views/registration/Login.vue +++ b/src/views/registration/Login.vue @@ -103,9 +103,9 @@ export default { if (this.$store.state.user) { this.$store.commit( 'DISPLAY_MESSAGE', - { comment: "Vous êtes déjà connecté, vous allez être redirigé vers la page d'accueil." } + { comment: 'Vous êtes déjà connecté, vous allez être redirigé vers la page précédente.' } ); - setTimeout(() => this.$router.push('/'), 3100); + setTimeout(() => this.$store.dispatch('REDIRECT_AFTER_LOGIN'), 3100); } }, methods: {