hmkim 04-23
250423 김혜민 세션로그인에러 수정
@7d80ac42be9740fc3b228ab226f4a634cce259b4
client/resources/api/index.js
--- client/resources/api/index.js
+++ client/resources/api/index.js
@@ -69,8 +69,6 @@
         sessionStorage.setItem("redirect", redirect);
         alert('세션이 종료 되었습니다.\n로그인을 새로 해주세요.');
         store.commit("setStoreReset");
-        //refresh 쿠키 삭제
-        document.cookie = "refresh=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
         window.location = '/login.page';
         return Promise.reject(refreshError);
       }
client/views/index.js
--- client/views/index.js
+++ client/views/index.js
@@ -22,7 +22,7 @@
 async function initVueApp() {
   const savedLoginMode = localStorage.getItem("loginMode");
   if (savedLoginMode) {
-    store.commit("setLoginMode", savedLoginMode);
+    Store.commit("setLoginMode", savedLoginMode);
   }
 
   const router = await createAppRouter()
client/views/pages/App.vue
--- client/views/pages/App.vue
+++ client/views/pages/App.vue
@@ -29,11 +29,6 @@
       path: "",
     };
   },
-  created() { 
-    const loginMode = localStorage.getItem("loginMode");
-  if (loginMode) {
-    this.$store.commit("setLoginMode", loginMode);
-  }},
   methods: {},
   watch: {
     $route(to, from) {
client/views/pages/AppRouter.js
--- client/views/pages/AppRouter.js
+++ client/views/pages/AppRouter.js
@@ -135,6 +135,7 @@
 // 권한 검증
 function isValidRole() {
   const roles = store.state.roles;
+  console.log('권한확인',roles);
   if (!Array.isArray(roles)) {
     store.commit("setStoreReset");
     return false;
@@ -176,18 +177,11 @@
     const isLogin = loginMode === 'J' ? store.state.authorization : store.state.mbrId;
     if (!isLogin && to.path !== filters.ctxPath('/login.page')) {
       next({ path: filters.ctxPath("/login.page") });
-      return;
+      return; 
     }
 
     // 접근 제어 확인
-    let accesCheck = false;
-    if (loginMode === 'J') {
-      // JWT 방식 접근 제어
-      accesCheck = await accessUrl(to.path);
-    } else if (loginMode === 'S') {
-      // 세션 방식 접근 제어 (세션이 유효한지 확인)
-      accesCheck = store.state.mbrId != null;
-    }
+    const accesCheck = await accessUrl(to.path);
     console.log('accesCheck', accesCheck);
     const roleCheck = isValidRole();
     if (!accesCheck || !roleCheck) {
client/views/pages/AppStore.js
--- client/views/pages/AppStore.js
+++ client/views/pages/AppStore.js
@@ -3,10 +3,13 @@
 import { logOutProc } from "../../resources/api/logOut"
 
 export default createStore({
-  plugins: [createPersistedState()],
+  plugins: [createPersistedState({
+    paths: ['loginMode', 'authorization', 'mbrId', 'mbrNm', 'roles', 'contextPath']
+  })],
   state: {
     authorization: null,
     // refresh: null,
+    loginMode: 'J',
     userType: "portal",
     menu: null,
     path: null,
@@ -19,6 +22,7 @@
     // getRefresh: function () {},
     getMbrNm: function () {},
     getRoles: function () {},
+    getLoginMode: state => state.loginMode,
   },
   mutations: {
     setAuthorization(state, newValue) {
@@ -48,6 +52,7 @@
     setStoreReset(state) {
       state.authorization = null;
       // state.refresh = null;
+      state.loginMode = 'J';
       state.mbrNm = null;
       state.mbrId = null;
       state.roles = [{authority: "ROLE_NONE"}];
@@ -63,7 +68,10 @@
     },
     setContextPath(state, ctx) {
       state.contextPath = ctx;
-    }
+    },
+    setLoginMode(state, value) {
+      state.loginMode = value;
+    },
   },
   actions: {
     async logout({ commit }) {
client/views/pages/login/Login.vue
--- client/views/pages/login/Login.vue
+++ client/views/pages/login/Login.vue
@@ -108,6 +108,7 @@
               // JWT 방식
               store.commit("setAuthorization", res.headers.authorization);
               store.commit("setLoginMode", "J");
+              localStorage.setItem("loginMode", "J");
               const base64String = store.state.authorization.split(".")[1];
               const base64 = base64String.replace(/-/g, "+").replace(/_/g, "/");
               const jsonPayload = decodeURIComponent(
@@ -120,18 +121,19 @@
               store.commit("setMbrNm", mbr.mbrNm);
               store.commit("setRoles", mbr.roles);
           } else if (loginType === 'S') {
-              // 세션 방식 (서버에서 따로 body에 사용자 정보 내려줘야 함)
               store.commit("setLoginMode", "S");
+              localStorage.setItem("loginMode", "S");
               const mbr = res.data;
               store.commit("setAuthorization", null);
               store.commit("setMbrId", mbr.mbrId);
               store.commit("setMbrNm", mbr.mbrNm);
-              store.commit("setRoles", mbr.roles);
+              const roles = mbr.roles.map(r => ({ authority: r.authrtCd }));
+              store.commit("setRoles", roles);
           } else {
               alert("알 수 없는 로그인 방식입니다.");
               return;
           }
-
+          const isAdmin = store.state.roles.some(role => role.authority === "ROLE_ADMIN");
           let url = this.restoreRedirect("redirect");
           if (url != null && url != "") {
             const ctx = store.state.contextPath;
@@ -149,7 +151,9 @@
               this.$router.push({ path: url });
             }
           } else {
-            this.$router.push({ path: this.$filters.ctxPath("/") });
+            this.$router.push({
+                path: isAdmin ? this.$filters.ctxPath("/adm/main.page") : this.$filters.ctxPath("/")
+              });
           }
 
           
Add a comment
List