diff --git a/src/store/api.js b/src/store/api.js index 0bd84e621a..32d54277f4 100644 --- a/src/store/api.js +++ b/src/store/api.js @@ -1,4 +1,5 @@ import Axios from 'axios'; +import router from '../router'; import { setupCache, buildWebStorage } from 'axios-cache-interceptor'; //Do not change store import. @@ -36,11 +37,14 @@ api.interceptors.response.use(undefined, (error) => { } } + // Check if action is unauthorized. if (response.status == 403) { - // Check if action is unauthorized. - // Toast error message will appear on screen - // when the action is unauthorized. - store.commit('global/setUnauthorized'); + if (isPasswordExpired(response)) { + router.push('/change-password'); + } else { + // Toast error message will appear on screen. + store.commit('global/setUnauthorized'); + } } return Promise.reject(error); @@ -84,3 +88,13 @@ export const getResponseCount = (responses) => { errorCount, }; }; + +export const isPasswordExpired = (response) => { + let extInfoMsgs = response?.data?.['@Message.ExtendedInfo']; + return ( + extInfoMsgs && + extInfoMsgs.find( + (i) => i.MessageId.split('.')[4] === 'PasswordChangeRequired', + ) + ); +}; diff --git a/src/store/modules/Authentication/AuthenticanStore.js b/src/store/modules/Authentication/AuthenticanStore.js index 3ad41c6b1a..b64def0695 100644 --- a/src/store/modules/Authentication/AuthenticanStore.js +++ b/src/store/modules/Authentication/AuthenticanStore.js @@ -1,4 +1,4 @@ -import api from '@/store/api'; +import api, { isPasswordExpired } from '@/store/api'; import Cookies from 'js-cookie'; import router from '@/router'; import { roles } from '@/router/routes'; @@ -59,6 +59,7 @@ const AuthenticationStore = { commit('authSuccess', { session: response.headers['location'], }); + return isPasswordExpired(response); }) .catch((error) => { commit('authError'); diff --git a/src/views/Login/Login.vue b/src/views/Login/Login.vue index db475c5623..5e1e6ddd9f 100644 --- a/src/views/Login/Login.vue +++ b/src/views/Login/Login.vue @@ -117,14 +117,11 @@ export default { const password = this.userInfo.password; this.$store .dispatch('authentication/login', { username, password }) - .then(() => { + .then((PasswordChangeRequired) => { localStorage.setItem('storedLanguage', i18n.locale); localStorage.setItem('storedUsername', username); this.$store.commit('global/setUsername', username); this.$store.commit('global/setLanguagePreference', i18n.locale); - return this.$store.dispatch('authentication/getUserInfo', username); - }) - .then(({ PasswordChangeRequired }) => { if (PasswordChangeRequired) { this.$router.push('/change-password'); } else {