// ToknenManager.tsx
// 로그인에 성공하면 setToken(token)으로 axios 기본 헤더를 세팅하고 cookie에 저장한다.
function setToken(token: Token) {
axios.defaults.headers.common["Authorization"] = `${token}`;
cookie.save("token", token, { path: "/", httpOnly: true });
}
export { setToken };
App.getInitialProps = async (ctx: Context) => {
// key의 값을 출력하는 함수를 만듬.
function getCookie(key: any) {
let result = null;
// cookie log를 찍어보면 ;로 구분해서 string 값으로 들어오기 때문에 split으로 나눈다.
let cookie = ctx?.ctx?.req?.headers?.cookie?.split(";");
cookie.some(function (item: any) {
// 공백을 제거
item = item.replace(" ", "");
let dic = item.split("=");
if (key === dic[0]) {
result = dic[1];
return true; // break;
}
});
return result;
}
const token = getCookie("token");
if (token) {
setToken(token);
}
return {};
useEffect(() => {
let token = cookie.load("token");
setToken(token);
}, [router]);
refresh는 local로, access는 cookie