This is an automated email from the ASF dual-hosted git repository.

nvazquez pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/main by this push:
     new 5eb2b693e90 fixes login button not work and Single Sign-On tab 
disabled after logout (#6197)
5eb2b693e90 is described below

commit 5eb2b693e907886e826f059aeca3aab975167d0f
Author: Hoang Nguyen <[email protected]>
AuthorDate: Mon Apr 11 20:45:51 2022 +0700

    fixes login button not work and Single Sign-On tab disabled after logout 
(#6197)
---
 ui/src/api/index.js          |  4 +++-
 ui/src/store/getters.js      |  3 ++-
 ui/src/store/modules/user.js |  8 +++++++-
 ui/src/utils/request.js      |  3 +++
 ui/src/views/auth/Login.vue  | 26 ++++++++++++++++++++------
 5 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/ui/src/api/index.js b/ui/src/api/index.js
index e54a71552ea..27356eea234 100644
--- a/ui/src/api/index.js
+++ b/ui/src/api/index.js
@@ -41,7 +41,9 @@ export function api (command, args = {}, method = 'GET', data 
= {}) {
 }
 
 export function login (arg) {
-  sourceToken.init()
+  if (!sourceToken.checkExistSource()) {
+    sourceToken.init()
+  }
 
   // Logout before login is called to purge any duplicate sessionkey cookies
   api('logout')
diff --git a/ui/src/store/getters.js b/ui/src/store/getters.js
index d0ebd6743e5..214b4b04a0d 100644
--- a/ui/src/store/getters.js
+++ b/ui/src/store/getters.js
@@ -42,7 +42,8 @@ const getters = {
   darkMode: state => state.user.darkMode,
   defaultListViewPageSize: state => state.user.defaultListViewPageSize,
   countNotify: state => state.user.countNotify,
-  customColumns: state => state.user.customColumns
+  customColumns: state => state.user.customColumns,
+  logoutFlag: state => state.user.logoutFlag
 }
 
 export default getters
diff --git a/ui/src/store/modules/user.js b/ui/src/store/modules/user.js
index 95f91d733c3..3a5233aa13b 100644
--- a/ui/src/store/modules/user.js
+++ b/ui/src/store/modules/user.js
@@ -57,7 +57,8 @@ const user = {
     domainStore: {},
     darkMode: false,
     defaultListViewPageSize: 20,
-    countNotify: 0
+    countNotify: 0,
+    logoutFlag: false
   },
 
   mutations: {
@@ -126,6 +127,9 @@ const user = {
     SET_CUSTOM_COLUMNS: (state, customColumns) => {
       vueProps.$localStorage.set(CUSTOM_COLUMNS, customColumns)
       state.customColumns = customColumns
+    },
+    SET_LOGOUT_FLAG: (state, flag) => {
+      state.logoutFlag = flag
     }
   },
 
@@ -166,6 +170,7 @@ const user = {
           commit('SET_LDAP', {})
           commit('SET_CLOUDIAN', {})
           commit('SET_DOMAIN_STORE', {})
+          commit('SET_LOGOUT_FLAG', false)
 
           notification.destroy()
 
@@ -293,6 +298,7 @@ const user = {
         commit('SET_CLOUDIAN', {})
         commit('RESET_THEME')
         commit('SET_DOMAIN_STORE', {})
+        commit('SET_LOGOUT_FLAG', true)
         vueProps.$localStorage.remove(CURRENT_PROJECT)
         vueProps.$localStorage.remove(ACCESS_TOKEN)
         vueProps.$localStorage.remove(HEADER_NOTICES)
diff --git a/ui/src/utils/request.js b/ui/src/utils/request.js
index 64a63d64e2c..6b01bec5c1b 100644
--- a/ui/src/utils/request.js
+++ b/ui/src/utils/request.js
@@ -167,6 +167,9 @@ const sourceToken = {
   isCancel: (e) => {
     return axios.isCancel(e)
   },
+  checkExistSource: () => {
+    return source
+  },
   getSource: () => {
     if (!source) sourceToken.init()
     return source
diff --git a/ui/src/views/auth/Login.vue b/ui/src/views/auth/Login.vue
index f513ddb672f..8e6bb2e6c49 100644
--- a/ui/src/views/auth/Login.vue
+++ b/ui/src/views/auth/Login.vue
@@ -160,6 +160,7 @@ import { ref, reactive, toRaw } from 'vue'
 import { api } from '@/api'
 import store from '@/store'
 import { mapActions } from 'vuex'
+import { sourceToken } from '@/utils/request'
 import { SERVER_MANAGER } from '@/store/mutation-types'
 import TranslationMenu from '@/components/header/TranslationMenu'
 
@@ -186,7 +187,12 @@ export default {
       this.server = this.$localStorage.get(SERVER_MANAGER) || 
this.$config.servers[0]
     }
     this.initForm()
-    this.fetchData()
+    if (store.getters.logoutFlag) {
+      sourceToken.init()
+      this.fetchData()
+    } else {
+      this.fetchData()
+    }
   },
   methods: {
     ...mapActions(['Login', 'Logout']),
@@ -195,8 +201,12 @@ export default {
       this.form = reactive({
         server: (this.server.apiHost || '') + this.server.apiBase
       })
-      this.rules = reactive({
-        username: [
+      this.rules = reactive({})
+      this.setRules()
+    },
+    setRules () {
+      if (this.customActiveKey === 'cs') {
+        this.rules.username = [
           {
             required: true,
             message: this.$t('message.error.username'),
@@ -206,15 +216,18 @@ export default {
             validator: this.handleUsernameOrEmail,
             trigger: 'change'
           }
-        ],
-        password: [
+        ]
+        this.rules.password = [
           {
             required: true,
             message: this.$t('message.error.password'),
             trigger: 'change'
           }
         ]
-      })
+      } else {
+        this.rules.username = []
+        this.rules.password = []
+      }
     },
     fetchData () {
       api('listIdps').then(response => {
@@ -242,6 +255,7 @@ export default {
     },
     handleTabClick (key) {
       this.customActiveKey = key
+      this.setRules()
     },
     handleSubmit (e) {
       e.preventDefault()

Reply via email to