summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/store/api.js22
-rw-r--r--src/store/modules/Authentication/AuthenticanStore.js3
-rw-r--r--src/views/Login/Login.vue10
3 files changed, 24 insertions, 11 deletions
diff --git a/src/store/api.js b/src/store/api.js
index 45ffc3c9..7d727562 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 3ad41c6b..b64def06 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 213dd481..0878d0ea 100644
--- a/src/views/Login/Login.vue
+++ b/src/views/Login/Login.vue
@@ -69,6 +69,7 @@ import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
import { useVuelidate } from '@vuelidate/core';
import { ref, watch } from 'vue';
import { useI18n } from 'vue-i18n';
+import i18n from '@/i18n';
import Alert from '@/components/Global/Alert';
import InputPasswordToggle from '@/components/Global/InputPasswordToggle';
@@ -132,14 +133,11 @@ export default {
const password = this.userInfo.password;
this.$store
.dispatch('authentication/login', { username, password })
- .then(() => {
- localStorage.setItem('storedLanguage', this.userLocale);
+ .then((PasswordChangeRequired) => {
+ localStorage.setItem('storedLanguage', i18n.locale);
localStorage.setItem('storedUsername', username);
this.$store.commit('global/setUsername', username);
- this.$store.commit('global/setLanguagePreference', this.userLocale);
- return this.$store.dispatch('authentication/getUserInfo', username);
- })
- .then(({ PasswordChangeRequired }) => {
+ this.$store.commit('global/setLanguagePreference', i18n.locale);
if (PasswordChangeRequired) {
this.$router.push('/change-password');
} else {