From f99d9645f108d4d734ddd4a703272e6e8caaa1f2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=ED=95=9C=EB=8F=99=ED=98=84?= <hando1220@ajou.ac.kr>
Date: Fri, 14 Mar 2025 22:22:51 +0900
Subject: [PATCH] =?UTF-8?q?fix:=20API=20=EC=9A=94=EC=B2=AD=EC=8B=9C=20?=
 =?UTF-8?q?=ED=86=A0=ED=81=B0=EC=9D=84=20=EC=A0=84=EB=8B=AC=ED=95=98?=
 =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=EC=88=98?=
 =?UTF-8?q?=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/pages/forwarding/Create.tsx | 4 ++--
 src/pages/forwarding/List.tsx   | 8 ++++----
 src/stores/authStore.ts         | 6 ++++++
 3 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/pages/forwarding/Create.tsx b/src/pages/forwarding/Create.tsx
index c90353f..a1d9a56 100644
--- a/src/pages/forwarding/Create.tsx
+++ b/src/pages/forwarding/Create.tsx
@@ -25,7 +25,7 @@ const formSchema = z.object({
 
 export default function ForwardingCreate() {
   const navigate = useNavigate();
-  const { selectedProject } = useAuthStore();
+  const { authFetch, selectedProject } = useAuthStore();
   const form = useForm<z.infer<typeof formSchema>>({
     resolver: zodResolver(formSchema),
     defaultValues: {
@@ -38,7 +38,7 @@ export default function ForwardingCreate() {
   async function onSubmit(values: z.infer<typeof formSchema>) {
     const { name, serverPort, instanceIp } = values;
 
-    const response = await fetch(`/api/forwarding?projectId=${selectedProject?.id}`, {
+    const response = await authFetch(`/api/forwarding?projectId=${selectedProject?.id}`, {
       method: 'POST',
       headers: {
         'Content-Type': 'application/json',
diff --git a/src/pages/forwarding/List.tsx b/src/pages/forwarding/List.tsx
index 5855dfc..3fa1999 100644
--- a/src/pages/forwarding/List.tsx
+++ b/src/pages/forwarding/List.tsx
@@ -22,12 +22,12 @@ import {
 } from '@/components/ui/alert-dialog';
 
 export default function ForwardingList() {
-  const { selectedProject } = useAuthStore();
+  const { authFetch, selectedProject } = useAuthStore();
   const [forwardings, setForwardings] = useState<Forwarding[] | null>(null);
   const [selectedForwarding, setSelectedForwarding] = useState<Forwarding | null>(null);
 
   useEffect(() => {
-    fetch(`/api/forwardings?projectId=${selectedProject?.id}`)
+    authFetch(`/api/forwardings?projectId=${selectedProject?.id}`)
       .then((response) => {
         if (!response.ok) {
           toast.error('포트포워딩 정보를 조회할 수 없습니다.');
@@ -39,12 +39,12 @@ export default function ForwardingList() {
       .then(({ contents }) => {
         setForwardings(contents);
       });
-  }, [selectedProject]);
+  }, [authFetch, selectedProject]);
 
   const handleDelete = () => {
     if (selectedForwarding === null) throw Error('selectedForwarding is null');
 
-    fetch(`/api/forwarding?forwardingId=${selectedForwarding.id}`, {
+    authFetch(`/api/forwarding?forwardingId=${selectedForwarding.id}`, {
       method: 'DELETE',
     }).then((response) => {
       if (!response.ok) {
diff --git a/src/stores/authStore.ts b/src/stores/authStore.ts
index ff8324c..a44616f 100644
--- a/src/stores/authStore.ts
+++ b/src/stores/authStore.ts
@@ -9,6 +9,7 @@ export interface AuthStore {
   projects: Project[];
   selectedProject: (Project & { role?: string }) | null;
   setSelectedProject: (project: Project) => Promise<void>;
+  authFetch: (input: RequestInfo, init?: RequestInit) => Promise<Response>;
   login: (username: string, password: string) => void;
   logout: () => void;
 }
@@ -38,6 +39,11 @@ export const useAuthStore = create<AuthStore>()(
 
         console.log(role);
       },
+      authFetch: async (input, init) =>
+        fetch(input, {
+          ...init,
+          headers: { ...init?.headers, 'X-Subject-Token': get().token! },
+        }),
       login: async (username, password) => {
         const response = await fetch('/api/auth/login', {
           method: 'POST',
-- 
GitLab