-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix(#254): home 페이지 강의 생성/조회 API 수정 #258
Fix(#254): home 페이지 강의 생성/조회 API 수정 #258
Conversation
- accessToken의 유효 여부에 따라 구분하여 정보를 localStorage에 저장하도록 하였습니다.
- localStorage에 저장한 내용을 바탕으로 HeaderprofileModal에 유저 정보를 표시하도록 하였습니다.
- 강의 생성 시에 accessToken을 담아 이를 바탕으로 강의를 생성하도록 수정하였습니다.
- 유저 정보를 저장하는 로직을 header에서 UserAuthSection으로 변경하였습니다.
- 강의 생성 시에 accessToken 존재 여부를 판단할 수 있는 훅을 작성하고 이를 활용하였습니다.
- guest임을 판단하여 localStorage에 정보가 없을 경우에는 guest로 표시하도록 하였습니다. - 불필요한 logout 버튼을 제거하였습니다.
- 강의 생성 시에 토큰이 유효한지를 판단하는 로직을 추가하였습니다.
✅ Deploy Preview for boarlog ready!
To edit notification comments on pull requests, go to your Netlify site configuration. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생 많으셨습니다👍👍
<UserIcon className="fill-grayscale-white" /> | ||
마이페이지 | ||
{localStorage.getItem("token") ? "마이페이지" : "로그인 하러가기"} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이제 이런 방법으로 로그인 여부를 판단하면 되겠군요!
} | ||
) | ||
.then((result) => { | ||
showToast({ message: "강의 생성을 완료했어요.", type: "success" }); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
toast 활용하기 너무 좋은 것 같아요!
const checkAuth = useCallback(() => { | ||
const accessToken = localStorage.getItem("token"); | ||
if (!accessToken) { | ||
showToast({ message: "로그인이 필요해요.", type: "alert" }); | ||
navigate("/userauth"); | ||
} else { | ||
const username = localStorage.getItem("username"); | ||
const email = localStorage.getItem("email"); | ||
if (!username || !email) { | ||
axios | ||
.get(`${import.meta.env.VITE_API_SERVER_URL}/profile`, { | ||
headers: { | ||
Authorization: accessToken | ||
} | ||
}) | ||
.then((response) => { | ||
localStorage.setItem("username", response.data.username); | ||
localStorage.setItem("email", response.data.email); | ||
}) | ||
.catch((error) => { | ||
console.log(error.response?.status); | ||
if (error.response?.status === 401) { | ||
showToast({ message: "로그인이 만료되었어요.", type: "alert" }); | ||
navigate("/userauth"); | ||
} else showToast({ message: "유저 정보를 불러오는데 문제가 발생했어요", type: "alert" }); | ||
}); | ||
} | ||
} | ||
}, [navigate, showToast]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
useCallback 처음 보는데 한 수 배웠습니다.
써야한다고 생각은 하지만 쓰지는 않게 되더라구요... ㅎㅎ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 부분은 아직 많이 부족한 것 같습니다 ㅠㅠ 많이 공부해봐야 할 것 같습니다. 더 정갈한 코드로 시간이 된다면 고쳐보겠습니다 :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨습니다.
작업 개요
작업 사항
고민한 점들(필수 X)
로그인 시에 수정된 API를 통해
token
과 함께 전달받는email
과username
을 local storage에 저장하도록 하였습니다.home 페이지의 경우, guest도 접근이 가능해야 했기 때문에 이를 위해 header에서 accessToken과 username, email이 local storage에 존재하는지의 여부에 따라 다르게 보이도록 하였습니다.
강의 생성 버튼을 클릭했을 때, token이 존재하는지, 유효한지를 판단합니다. 유효하다면 username과 email이 존재하는지를 판단하여 없다면 이를 요청하여 local storage에 저장합니다. 반대로 accessToken이 유효하지 않다면 로그인 페이지로 이동하도록 하였습니다.
이를
useAuth
커스텀 훅을 작성하여 활용하였습니다.스크린샷(필수 X)
Guest일 경우
2023-12-11.18-25-00.mp4
User일 경우
2023-12-11.18-26-12.mp4
유효하지 않은 token일 경우
2023-12-11.18-29-43.mp4