[SSR 비활성화] SPA 방식으로 변경
This commit is contained in:
@@ -1,8 +1,4 @@
|
|||||||
export default async function useOverlay() {
|
export default async function useOverlay() {
|
||||||
if (import.meta.server) {
|
// SPA 모드에서는 항상 클라이언트에서만 실행됨
|
||||||
// SSR에서는 cytoscape-overlays를 사용하지 않음
|
return await import("cytoscape-overlays");
|
||||||
return null
|
}
|
||||||
}
|
|
||||||
// 전체 export 객체를 반환
|
|
||||||
return await import('cytoscape-overlays')
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,32 +1,30 @@
|
|||||||
export default defineNuxtRouteMiddleware(async (to, _from) => {
|
export default defineNuxtRouteMiddleware(async (to, _from) => {
|
||||||
if (import.meta.client) {
|
const userStore = useUserStore();
|
||||||
const userStore = useUserStore();
|
const { hasPagePermission } = usePermission();
|
||||||
const { hasPagePermission } = usePermission();
|
|
||||||
|
|
||||||
// 공개 라우트 목록 (로그인 없이 접근 가능)
|
// 공개 라우트 목록 (로그인 없이 접근 가능)
|
||||||
const publicRoutes = ["/login", "/register", "/auth-error"];
|
const publicRoutes = ["/login", "/register", "/auth-error"];
|
||||||
|
|
||||||
// 공개 라우트인지 확인
|
// 공개 라우트인지 확인
|
||||||
const isPublicRoute = publicRoutes.some(route => to.path === route);
|
const isPublicRoute = publicRoutes.some(route => to.path === route);
|
||||||
|
|
||||||
// 공개 라우트가 아닌 경우 로그인 체크
|
// 공개 라우트가 아닌 경우 로그인 체크
|
||||||
if (!isPublicRoute && !userStore.isLoggedIn) {
|
if (!isPublicRoute && !userStore.isLoggedIn) {
|
||||||
return navigateTo("/login");
|
return navigateTo("/login");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 로그인된 사용자의 경우 권한 체크
|
||||||
|
if (userStore.isLoggedIn) {
|
||||||
|
// 홈화면 경로는 항상 허용
|
||||||
|
if (to.path === "/" || to.path === "/1/") {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 로그인된 사용자의 경우 권한 체크
|
// 페이지 권한 체크
|
||||||
if (userStore.isLoggedIn) {
|
if (!hasPagePermission(to.path)) {
|
||||||
// 홈화면 경로는 항상 허용
|
console.log(`페이지 권한이 없습니다.: ${to.path}`);
|
||||||
if (to.path === "/" || to.path === "/1/") {
|
alert(`페이지 권한이 없습니다.`);
|
||||||
return;
|
return navigateTo("/");
|
||||||
}
|
|
||||||
|
|
||||||
// 페이지 권한 체크
|
|
||||||
if (!hasPagePermission(to.path)) {
|
|
||||||
console.log(`페이지 권한이 없습니다.: ${to.path}`);
|
|
||||||
alert(`페이지 권한이 없습니다.`);
|
|
||||||
return navigateTo("/");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// https://nuxt.com/docs/api/configuration/nuxt-config
|
// https://nuxt.com/docs/api/configuration/nuxt-config
|
||||||
export default defineNuxtConfig({
|
export default defineNuxtConfig({
|
||||||
compatibilityDate: "2025-05-15",
|
ssr: false,
|
||||||
devtools: { enabled: true },
|
devtools: { enabled: true },
|
||||||
modules: [
|
modules: [
|
||||||
"@nuxt/eslint",
|
"@nuxt/eslint",
|
||||||
@@ -36,7 +36,7 @@ export default defineNuxtConfig({
|
|||||||
shim: false,
|
shim: false,
|
||||||
strict: true,
|
strict: true,
|
||||||
},
|
},
|
||||||
plugins: ["~/plugins/vue3-tui-grid.client.ts"],
|
plugins: ["~/plugins/vue3-tui-grid.ts"],
|
||||||
components: [
|
components: [
|
||||||
{ path: "~/components/base", pathPrefix: false }, // @base/ 접두사 제거
|
{ path: "~/components/base", pathPrefix: false }, // @base/ 접두사 제거
|
||||||
{ path: "~/components/layout", pathPrefix: false }, // @layout/ 접두사 제거
|
{ path: "~/components/layout", pathPrefix: false }, // @layout/ 접두사 제거
|
||||||
|
|||||||
@@ -19,18 +19,6 @@ export default defineNuxtPlugin(() => {
|
|||||||
...(isFormData ? {} : { "Content-Type": "application/json" }),
|
...(isFormData ? {} : { "Content-Type": "application/json" }),
|
||||||
...(options.headers || {}),
|
...(options.headers || {}),
|
||||||
};
|
};
|
||||||
|
|
||||||
// 3) SSR 쿠키 포워딩
|
|
||||||
if (import.meta.server) {
|
|
||||||
const cookie = useRequestHeaders(["cookie"])?.cookie;
|
|
||||||
const reqUrl = String(request);
|
|
||||||
const isBackendApi =
|
|
||||||
!reqUrl.startsWith("http") || reqUrl.startsWith(baseURL);
|
|
||||||
|
|
||||||
if (cookie && isBackendApi) {
|
|
||||||
options.headers = { ...(options.headers || {}), cookie } as any;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
onResponseError({ response }) {
|
onResponseError({ response }) {
|
||||||
// 공통 로깅
|
// 공통 로깅
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { defineNuxtPlugin } from '#app'
|
import { defineNuxtPlugin } from '#app'
|
||||||
import TuiGrid from 'vue3-tui-grid'
|
import TuiGrid from 'vue3-tui-grid'
|
||||||
import 'tui-grid/dist/tui-grid.css'
|
import 'tui-grid/dist/tui-grid.css'
|
||||||
|
|
||||||
export default defineNuxtPlugin(nuxtApp => {
|
export default defineNuxtPlugin(nuxtApp => {
|
||||||
nuxtApp.vueApp.use(TuiGrid)
|
nuxtApp.vueApp.use(TuiGrid)
|
||||||
})
|
})
|
||||||
Reference in New Issue
Block a user