Skip to content
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

Merged

Conversation

LellowMellow
Copy link
Collaborator

작업 개요

작업 사항

  • 로그인 시에 유저 정보 localStorage 저장
  • header Guest일 경우 modal 정보 표시 처리
  • useAuth 커스텀 훅 분리
  • home 페이지 강의 생성 로직 수정
  • home 페이지 강의 생성 API 수정

고민한 점들(필수 X)

image

로그인 시에 수정된 API를 통해 token과 함께 전달받는 emailusername을 local storage에 저장하도록 하였습니다.

로그인 여부에 따른 modal 차이

home 페이지의 경우, guest도 접근이 가능해야 했기 때문에 이를 위해 header에서 accessToken과 username, email이 local storage에 존재하는지의 여부에 따라 다르게 보이도록 하였습니다.

강의 생성 버튼을 클릭했을 때, token이 존재하는지, 유효한지를 판단합니다. 유효하다면 username과 email이 존재하는지를 판단하여 없다면 이를 요청하여 local storage에 저장합니다. 반대로 accessToken이 유효하지 않다면 로그인 페이지로 이동하도록 하였습니다.

이를 useAuth 커스텀 훅을 작성하여 활용하였습니다.

import { useCallback } from "react";
import { useNavigate } from "react-router-dom";
import axios from "axios";
import { useToast } from "@/components/Toast/useToast";

const useAuth = () => {
  const navigate = useNavigate();
  const showToast = useToast();

  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) => {
            if (error.response?.status === 401) {
              showToast({ message: "로그인이 만료되었어요.", type: "alert" });
              navigate("/userauth");
            } else showToast({ message: "프로필을 불러오는데 문제가 발생했어요", type: "alert" });
          });
      }
    }
  }, [navigate, showToast]);

  return { checkAuth };
};

export default 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

- accessToken의 유효 여부에 따라 구분하여 정보를 localStorage에
  저장하도록 하였습니다.
- localStorage에 저장한 내용을 바탕으로 HeaderprofileModal에 유저 정보를
  표시하도록 하였습니다.
- 강의 생성 시에 accessToken을 담아 이를 바탕으로 강의를 생성하도록
  수정하였습니다.
- 유저 정보를 저장하는 로직을 header에서 UserAuthSection으로 변경하였습니다.
- 강의 생성 시에 accessToken 존재 여부를 판단할 수 있는 훅을 작성하고
  이를 활용하였습니다.
- guest임을 판단하여 localStorage에 정보가 없을 경우에는 guest로
  표시하도록 하였습니다.
- 불필요한 logout 버튼을 제거하였습니다.
- 강의 생성 시에 토큰이 유효한지를 판단하는 로직을 추가하였습니다.
@LellowMellow LellowMellow added 🐞 Fix 버그 수정 FE 프론트엔드 작업 labels Dec 11, 2023
@LellowMellow LellowMellow added this to the 6주차 milestone Dec 11, 2023
@LellowMellow LellowMellow self-assigned this Dec 11, 2023
Copy link

netlify bot commented Dec 11, 2023

Deploy Preview for boarlog ready!

Name Link
🔨 Latest commit 3c4a64d
🔍 Latest deploy log https://app.netlify.com/sites/boarlog/deploys/6576d6f559bef40008770d64
😎 Deploy Preview https://deploy-preview-258--boarlog.netlify.app/
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

Copy link
Collaborator

@Jw705 Jw705 left a 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") ? "마이페이지" : "로그인 하러가기"}
Copy link
Collaborator

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" });
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

toast 활용하기 너무 좋은 것 같아요!

Comment on lines +10 to +38
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]);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

useCallback 처음 보는데 한 수 배웠습니다.
써야한다고 생각은 하지만 쓰지는 않게 되더라구요... ㅎㅎ

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분은 아직 많이 부족한 것 같습니다 ㅠㅠ 많이 공부해봐야 할 것 같습니다. 더 정갈한 코드로 시간이 된다면 고쳐보겠습니다 :)

Copy link
Collaborator

@Byeonjin Byeonjin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다.

@LellowMellow LellowMellow merged commit efb8ae6 into boostcampwm2023:dev Dec 12, 2023
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
FE 프론트엔드 작업 🐞 Fix 버그 수정
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Fix: home 페이지 강의 생성/조회 API 수정
3 participants