diff --git a/.env b/.env index a8f8557..56d4893 100644 --- a/.env +++ b/.env @@ -4,4 +4,5 @@ WDS_SOCKET_PORT=0 NODE_PATH=src/ REACT_APP_API_ROOT=http://localhost:8080 REACT_APP_HOME_URL=http://localhost:3000 -REACT_APP_API_URL=http://readyvery.com/api/v1 \ No newline at end of file +REACT_APP_API_URL=http://readyvery.com/api/v1 +REACT_APP_KAKAO_LOGIN=http://localhost:8080/oauth2/authorization/kakao \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 2fdbafc..e88f4d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "moment": "^2.29.4", "react": "^18.2.0", "react-bootstrap": "^2.9.1", + "react-cookie": "^6.1.1", "react-dom": "^18.2.0", "react-icons": "^4.11.0", "react-modal": "^3.16.1", @@ -4856,6 +4857,11 @@ "@types/node": "*" } }, + "node_modules/@types/cookie": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.4.tgz", + "integrity": "sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA==" + }, "node_modules/@types/d3-color": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-2.0.6.tgz", @@ -15864,6 +15870,19 @@ } } }, + "node_modules/react-cookie": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-6.1.1.tgz", + "integrity": "sha512-fuFRpf8LH6SfmVMowDUIRywJF5jAUDUWrm0EI5VdXfTl5bPcJ7B0zWbuYpT0Tvikx7Gs18MlvAT+P+744dUz2g==", + "dependencies": { + "@types/hoist-non-react-statics": "^3.3.1", + "hoist-non-react-statics": "^3.3.2", + "universal-cookie": "^6.0.0" + }, + "peerDependencies": { + "react": ">= 16.3.0" + } + }, "node_modules/react-dev-utils": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", @@ -18296,6 +18315,15 @@ "node": ">=8" } }, + "node_modules/universal-cookie": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-6.1.1.tgz", + "integrity": "sha512-33S9x3CpdUnnjwTNs2Fgc41WGve2tdLtvaK2kPSbZRc5pGpz2vQFbRWMxlATsxNNe/Cy8SzmnmbuBM85jpZPtA==", + "dependencies": { + "@types/cookie": "^0.5.1", + "cookie": "^0.5.0" + } + }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -22680,6 +22708,11 @@ "@types/node": "*" } }, + "@types/cookie": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.4.tgz", + "integrity": "sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA==" + }, "@types/d3-color": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-2.0.6.tgz", @@ -30622,6 +30655,16 @@ "warning": "^4.0.3" } }, + "react-cookie": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-6.1.1.tgz", + "integrity": "sha512-fuFRpf8LH6SfmVMowDUIRywJF5jAUDUWrm0EI5VdXfTl5bPcJ7B0zWbuYpT0Tvikx7Gs18MlvAT+P+744dUz2g==", + "requires": { + "@types/hoist-non-react-statics": "^3.3.1", + "hoist-non-react-statics": "^3.3.2", + "universal-cookie": "^6.0.0" + } + }, "react-dev-utils": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", @@ -32396,6 +32439,15 @@ "crypto-random-string": "^2.0.0" } }, + "universal-cookie": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-6.1.1.tgz", + "integrity": "sha512-33S9x3CpdUnnjwTNs2Fgc41WGve2tdLtvaK2kPSbZRc5pGpz2vQFbRWMxlATsxNNe/Cy8SzmnmbuBM85jpZPtA==", + "requires": { + "@types/cookie": "^0.5.1", + "cookie": "^0.5.0" + } + }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", diff --git a/package.json b/package.json index 2fb1762..d2cf359 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "moment": "^2.29.4", "react": "^18.2.0", "react-bootstrap": "^2.9.1", + "react-cookie": "^6.1.1", "react-dom": "^18.2.0", "react-icons": "^4.11.0", "react-modal": "^3.16.1", diff --git a/src/App.js b/src/App.js index aa046df..198841d 100644 --- a/src/App.js +++ b/src/App.js @@ -1,25 +1,63 @@ -import { Route, Routes } from "react-router-dom"; +import axios from 'axios'; +import React, { Suspense } from 'react'; +import { useCookies } from "react-cookie"; +import { Route, Routes, useNavigate } from "react-router-dom"; import { RecoilRoot } from "recoil"; -import Inventory from "../src/pages/Inventory/Inventory"; +import InventoryPage from "../src/pages/Inventory/Inventory"; import Mypage from "../src/pages/Mypage/Mypage"; -import Sales from "../src/pages/Sales/Sales"; +import SalesPage from "../src/pages/Sales/Sales"; import "./App.css"; -import Home from "./pages/Home/Home"; +import Auth from "./hoc/auth.jsx"; +import useInterval from './hooks/useInterval.jsx'; +import HomePage from "./pages/Home/Home"; +import MainPage from "./pages/Main/MainPage.jsx"; function App() { + const [cookies, , removeCookies] = useCookies(); + const navigate = useNavigate(); + const apiUrl = process.env.REACT_APP_API_ROOT; + + const NewLoginPage = Auth(MainPage, false); + const NewHomePage = Auth(HomePage, true); + const NewInventoryPage = Auth(InventoryPage, true); + const NewSalesPage = Auth(SalesPage, true); + const NewMyPage = Auth(Mypage, true); + + const expiredTime = 1000 * 60 * 60 * 24; + useInterval(() => { + if( + cookies.refreshToken !== 'undefined' && + cookies.refreshToken !== undefined && + cookies.refreshToken + ){ + const config = { + withCredentials: true, + } + axios.get(`${apiUrl}/api/v1/refresh/token`, config) + .then((response) => { + console.log(response); + if (!response.data) { + removeCookies(); + navigate('/'); + } + }) + .catch((err) => { + navigate("/"); + }) + } + }, expiredTime - 60000); return (
- {/*
*/} - + Loading...
}> - } /> - } /> - } /> - } /> + } /> + } /> + } /> + } /> + } /> - - {/*