const loginMutation = useMutation(
(data: LoginInfor) => {
return axios
.post(`${process.env.NEXT_PUBLIC_API_KEY}/auth/signin`, data)
.then((res) => {
const data = res.data;
//쿠키에 access 토큰 저장 //7일동안
document.cookie = `accessToken=${encodeURIComponent( data.accessToken)}; exprires=${getCookieExpiration(7)}`;
//recoil에도 유저 정보를 저장한다.
const data = res.data;
setUserInfor(data);
return res.data;
});
},
);
getCookieExpiration
함수는 쿠키의 만료 날짜를 계산합니다. 사용자가 입력한 정보를 encodeURIComponent
를 사용하여 인코딩한 후, document.cookie
에 문자열 형태로 설정
const getCookieExpiration = (days: number) => {
const date = new Date();
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
return date.toUTCString();
};
import {atom} from 'recoil'
export const userState = atom({
key: 'userState',
default:null
})
import {userSetRecoilState] from 'recoil'
function handleLoginSuccess(userInfo){
const setUser = useSetRecoilState(userState);
setUser(userInfo)
}
import {useRecoilValue} from 'recoil'
function UserInfo(){
const user = useRecoilValue(userState)
if(user) {
return <div>로그인 유저 : {user.name}</div>
}else{
return <div> 로그인되지 않음</div>
}
}
const user = useRecoilValue(userInformation);
const resetUerState = useResetRecoilState(userInformation);
const [logout, setLogout] = useRecoilState<boolean>(logoutModalState);
const handleLogout = () => {
document.cookie = `accessToken=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; `;
//recoil 상태 초기화
resetUerState();
//로그아웃 완료팝업
setLogout((prev: boolean) => !prev);
};