Skip to content

Commit

Permalink
feat: 빠른 데이터 요청
Browse files Browse the repository at this point in the history
  • Loading branch information
a-honey committed Jan 5, 2025
1 parent ae4e16b commit acad26d
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 3 deletions.
5 changes: 5 additions & 0 deletions src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";

import { RouterProvider } from "react-router-dom";
import { checkToken } from "./client-entry";
import router from "./router/router";

document.addEventListener("DOMContentLoaded", () => {
checkToken();
});

export const queryClient = new QueryClient({
defaultOptions: {
queries: {
Expand Down
1 change: 1 addition & 0 deletions src/api/auth/postLogin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export default async function postLogin(loginBody: LoginBodyType) {

localStorage.setItem("accessToken", accessToken);
localStorage.setItem("refreshToken", refreshToken);
localStorage.setItem("tokenAvailable", "true");

return response;
}
33 changes: 33 additions & 0 deletions src/client-entry.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
export async function checkToken() {
const accessToken = localStorage.getItem("accessToken");
const refreshToken = localStorage.getItem("refreshToken");
const headers = new Headers();

if (refreshToken) {
headers.append("x-refresh-token", refreshToken);
}
if (accessToken) {
headers.append("Authorization", `Bearer ${accessToken}`);
}
headers.append("Content-Type", "application/json");
try {
const response = await fetch("https://linkedoutapp.com/api/admin-info/my", {
method: "GET",
headers,
});

if (!response.ok) {
sessionStorage.setItem("tokenAvailable", "false");
}

if (response.status === 200) {
const data = await response.json();
sessionStorage.setItem("tokenAvailable", "true");
sessionStorage.setItem("root", `${data.data.name === "root"}`);
} else {
sessionStorage.setItem("tokenAvailable", "false");
}
} catch (error) {
console.error("Error fetching data:", error);
}
}
9 changes: 6 additions & 3 deletions src/layouts/authCheckLoader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,18 @@ import { redirect } from "react-router-dom";
type LoaderContext = "AuthLayout" | "DefaultLayout";

export default async function authCheckLoader(context: LoaderContext) {
const accessToken = localStorage.getItem("accessToken");
const tokenAvailable = localStorage.getItem("tokenAvailable");

if (tokenAvailable) {
redirect("/auth/login");
}

const handleUnauthorized = () => {
localStorage.removeItem("accessToken");
return redirect(`/auth/${AuthPaths.LOGIN}`);
};

if (!accessToken) {
if (!tokenAvailable || tokenAvailable === "false") {
return context === "DefaultLayout" ? handleUnauthorized() : null;
}

Expand All @@ -27,7 +31,6 @@ export default async function authCheckLoader(context: LoaderContext) {
sessionStorage.setItem("redirected", "true");

if (response?.id !== undefined) {
localStorage.setItem("isRootAccount", `${response.id === 0}`);
if (context === "AuthLayout") {
return redirect(`/${DefaultPaths.DASHBOARD}`);
}
Expand Down
5 changes: 5 additions & 0 deletions vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ import react from "@vitejs/plugin-react";

// https://vite.dev/config/
export default defineConfig({
server: {
hmr: {
overlay: false,
},
},
plugins: [
react(),
VitePWA({
Expand Down

0 comments on commit acad26d

Please sign in to comment.