diff --git a/src/api/axiosInstance.tsx b/src/api/axiosInstance.tsx index bce6c6bb8..740b5e5fc 100644 --- a/src/api/axiosInstance.tsx +++ b/src/api/axiosInstance.tsx @@ -2,4 +2,49 @@ import axios from "axios"; export const axiosInstance = axios.create({ baseURL: "https://bootcamp-api.codeit.kr/api/", + headers: { + "Content-Type": "application/json", + withCredentials: true, + }, }); + +axiosInstance.interceptors.request.use((config) => { + if (!config.headers) return config; + if (typeof window !== "undefined") { + const accessToken = localStorage.getItem("accessToken"); + if (accessToken && config.headers) { + config.headers["Authorization"] = accessToken; + } + } + return config; +}); + +axiosInstance.interceptors.response.use( + (res) => { + return res; + }, + async (error) => { + if (error.config && error.response && error.response.status === 401) { + error.config._retry = true; + const refreshtoken = localStorage.getItem("refreshToken"); + error.config.headers.RefreshToken = `${refreshtoken}`; + return axios + .get(`${process.env.NEXT_PUBLIC_API_URL}/auth/me`, { + headers: { + RefreshToken: `${refreshtoken}`, + "Content-Type": "application/json", + withCredentials: true, + }, + }) + .then(async (res) => { + if (res.status === 200 && res.data.accessToken) { + localStorage.setItem("accessToken", res.data.accessToken); + const accesstoken = localStorage.getItem("accessToken"); + error.config.headers["Authorization"] = `${accesstoken}`; + return axiosInstance(error.config); + } + }); + } + return Promise.reject(error); + }, +); diff --git a/src/api/getAllCards.tsx b/src/api/getAllCards.tsx index 3c11746e5..04f003e23 100644 --- a/src/api/getAllCards.tsx +++ b/src/api/getAllCards.tsx @@ -1,16 +1,14 @@ -import { CardInterface } from "@/types"; -import { USER_ID } from "./constants"; import { axiosInstance } from "./axiosInstance"; -export default async function getAllCards(id = "") { - let url = `${USER_ID}/links?`; +export default async function getAllCards(userId = "", folderId = "") { + let url = `${userId}/links?`; const searchUrl = new URLSearchParams(); - if (id !== "") { - searchUrl.append("folderId", id); + if (folderId !== "") { + searchUrl.append("folderId", folderId); url += searchUrl.toString(); } - + console.log(url); const response = await axiosInstance.get(`${url}`); - const data: CardInterface[] = response?.data?.data; - return data; + const data = response?.data?.data; + return data?.folder; } diff --git a/src/api/getFolderList.tsx b/src/api/getFolderList.tsx index 5a7490e81..f94f259e7 100644 --- a/src/api/getFolderList.tsx +++ b/src/api/getFolderList.tsx @@ -1,7 +1,6 @@ import { axiosInstance } from "./axiosInstance"; -import { USER_ID } from "./constants"; -export default async function getFolderList() { - const response = await axiosInstance.get(`${USER_ID}/folders`); +export default async function getFolderList(userId = "") { + const response = await axiosInstance.get(`${userId}/folders`); return response?.data; } diff --git a/src/api/getNewToken.tsx b/src/api/getNewToken.tsx new file mode 100644 index 000000000..f91d47940 --- /dev/null +++ b/src/api/getNewToken.tsx @@ -0,0 +1,10 @@ +import { axiosInstance } from "./axiosInstance"; + +export default async function getNewToken(refreshToken = "") { + if (!refreshToken) return; + + const response = await axiosInstance.post("/refresh-token", { + refresh_token: refreshToken, + }); + return response?.data; +} diff --git a/src/api/getSignUp.tsx b/src/api/getSignUp.tsx index c0efdd2d0..fa60b00ac 100644 --- a/src/api/getSignUp.tsx +++ b/src/api/getSignUp.tsx @@ -2,7 +2,7 @@ import { axiosInstance } from "./axiosInstance"; export default async function getSignUp(email = "", password = "") { try { - const response = await axiosInstance.post(`sign-up`, { + const response = await axiosInstance.post("/sign-up", { email: email, password: password, }); diff --git a/src/api/getSignin.tsx b/src/api/getSignin.tsx index c02c64e14..5a0ad55f2 100644 --- a/src/api/getSignin.tsx +++ b/src/api/getSignin.tsx @@ -2,12 +2,13 @@ import { axiosInstance } from "./axiosInstance"; export default async function getSignIn(email = "", password = "") { try { - const response = await axiosInstance.post(`sign-in`, { + const response = await axiosInstance.post("/sign-in", { email: email, password: password, }); return response.data; } catch (e) { + console.log(e); return; } } diff --git a/src/api/index.tsx b/src/api/index.tsx index 4cf4cdbf9..bc01c2bc8 100644 --- a/src/api/index.tsx +++ b/src/api/index.tsx @@ -1,6 +1,7 @@ import getAllCards from "./getAllCards"; import getFolderList from "./getFolderList"; import getUser from "./getUser"; +import getNewToken from "./getNewToken"; import getSharedFolder from "./getSharedFolder"; import getSharedUser from "./getSharedUser"; @@ -12,6 +13,7 @@ import getSignUp from "./getSignUp"; export { getAllCards, getFolderList, + getNewToken, getUser, getSharedFolder, getSharedUser, diff --git a/src/components/common/Nav/Nav.tsx b/src/components/common/Nav/Nav.tsx index e9c76314b..38de8726b 100644 --- a/src/components/common/Nav/Nav.tsx +++ b/src/components/common/Nav/Nav.tsx @@ -7,20 +7,15 @@ import Image from "next/image"; import Link from "next/link"; -import { UserInterface } from "@/types"; import styles from "./Nav.module.scss"; +import { useAuth } from "@/contexts/AuthProvider"; -function Nav({ - profile, - isSticky, -}: { - profile?: UserInterface; - isSticky?: boolean; -}) { +function Nav({ isSticky }: { isSticky?: boolean }) { let navClassName = isSticky ? { className: `${styles["sticky"]} ${styles["nav"]}` } : { className: `${styles["nav"]}` }; + const { user, logout } = useAuth(); return (