From 5e9b12c282620ae819bed3d5bc90700f81959fea Mon Sep 17 00:00:00 2001 From: Yash Maheshwari Date: Thu, 21 Sep 2023 18:59:09 +0530 Subject: [PATCH] Improved: code to redirect the user to SSO screen when enabled otherwise redirect to launchpad on logout --- src/store/modules/user/actions.ts | 23 ++++++++++++++++++++++- src/views/settings.vue | 9 ++++++--- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/store/modules/user/actions.ts b/src/store/modules/user/actions.ts index ef36d754..cfa63ac3 100644 --- a/src/store/modules/user/actions.ts +++ b/src/store/modules/user/actions.ts @@ -9,6 +9,7 @@ import { Settings } from 'luxon' import { updateInstanceUrl, updateToken, resetConfig, logout } from '@/adapter' import { useAuthStore } from '@hotwax/dxp-components'; import { getServerPermissionsFromRules, prepareAppPermissions, resetPermissions, setPermissions } from '@/authorization' +import emitter from '@/event-bus' const actions: ActionTree = { @@ -83,10 +84,21 @@ const actions: ActionTree = { * Logout user */ async logout ({ commit }, payload) { + // store the url on which we need to redirect the user after logout api completes in case of SSO enabled + let redirectionUrl = '' + + emitter.emit('presentLoader') // Calling the logout api to flag the user as logged out, only when user is authorised // if the user is already unauthorised then not calling the logout api as it returns 401 again that results in a loop, thus there is no need to call logout api if the user is unauthorised if(!payload?.isUserUnauthorised) { - await logout(); + let resp = await logout(); + + // Added logic to remove the `//` from the resp as in case of get request we are having the extra characters and in case of post we are having 403 + resp = JSON.parse(resp.startsWith('//') ? resp.replace('//', '') : resp) + + if(resp.logoutAuthType === 'SAML2SSO') { + redirectionUrl = resp.logoutUrl + } } const authStore = useAuthStore() @@ -103,6 +115,15 @@ const actions: ActionTree = { // reset plugin state on logout authStore.$reset() + + emitter.emit('dismissLoader') + // If we get any url in logout api resp then we will redirect the user to the url + if(redirectionUrl) { + window.location.href = redirectionUrl + return redirectionUrl; + } + + return ''; }, /** diff --git a/src/views/settings.vue b/src/views/settings.vue index 2f782d40..816a2efd 100644 --- a/src/views/settings.vue +++ b/src/views/settings.vue @@ -187,9 +187,12 @@ export default defineComponent({ }, methods: { logout: function() { - this.store.dispatch("user/logout").then(() => { - const redirectUrl = window.location.origin + '/login' - window.location.href = `${process.env.VUE_APP_LOGIN_URL}?isLoggedOut=true&redirectUrl=${redirectUrl}` + this.store.dispatch("user/logout", { isUserUnauthorised: false }).then((redirectionUrl) => { + // if not having redirection url then redirect the user to launchpad + if(!redirectionUrl) { + const redirectUrl = window.location.origin + '/login' + window.location.href = `${process.env.VUE_APP_LOGIN_URL}?isLoggedOut=true&redirectUrl=${redirectUrl}` + } }) }, goToLaunchpad() {