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

[S1] 로그인 관련 예외 처리 #616

Merged
merged 4 commits into from
Feb 23, 2024
Merged

[S1] 로그인 관련 예외 처리 #616

merged 4 commits into from
Feb 23, 2024

Conversation

lydiacho
Copy link
Member

@lydiacho lydiacho commented Feb 22, 2024

🔥 Related Issues

💜 작업 내용

  • axios interceptors로 401에러 발생 시 만료페이지로 navigate
  • 탭바 비로그인 시 예외 처리
  • 상세페이지 비로그인 시 예외 처리

✅ PR Point

401 에러 처리

axios interceptors.response를 통해 401에러 발생 시 만료 페이지로 navigate 해주도록 구현했습니다.
api 파일이 별도로 존재하지만 해당 처리는
useNavigate을 쓰기 위해

  • React Component 혹은 custom hook으로 만들어야 하고
  • BrowserRouter 내부에 속해야 합니다

따라서 interceptors라는 컴포넌트를 생성하여 예외처리 로직을 구현하고 BroswerRouter 내부에 넣어주었습니다

import { useEffect } from 'react';
import { useNavigate } from 'react-router-dom';
import { api, removeAccessToken } from '../api';

const Interceptors = () => {
  const navigate = useNavigate();

  useEffect(() => {
    api.interceptors.response.use(
      (res) => res,
      (err) => {
        console.log(err);
        if (err.response.status === 401) {
          removeAccessToken();
          navigate('/expired');
          return new Promise(() => null);
        }
        return Promise.reject(err);
      },
    );
  }, []);

  return null;
};

export default Interceptors;

탭바 비로그인 시 예외 처리

🪫 기존 문제
로그인하지 않는 경우에도 내 타투, 장바구니 페이지로 이동이 가능하여 에러가 발생했습니다

🔋 해결
만들어두신 isLogin 값을 사용해 navigate을 다르게 처리해주었습니다

  const handleClickMyTattooButton = () => {
    isLogin ? navigate('/my-tattoo') : navigate('/login');
  };

  const handleClickCartButton = () => {
    isLogin ? navigate('/cart') : navigate('/login');
  };

상세페이지 비로그인 시 예외 처리

🪫 기존 문제
비로그인 시 상세페이지 조회까진 가능하나, 좋아요 및 구매하기가 불가능해야 합니다
해당 예외 처리가 잘 되어있지 않아 좋아요 및 구매하기 클릭 시 오류가 발생했습니다

🔋 해결
토큰 존재 여부(로그인 여부)를 체크하여 비로그인 시 '로그인이 필요해요' 토스트페이지를 띄우고, false를 반환하는 checkLogin 함수를 만들어
handleClickButton (구매하기 클릭 핸들러), handleClickLike (좋아요 클릭 핸들러) 상단에서 예외처리를 해주었습니다

  const checkLogin = () => {
    if (!getAccessToken()) {  // 로그인 상태가 아닌 경우
      setToast(true);  // '로그인이 필요해요' 토스트 메시지 띄우기 
      return false;
    }
  };
const handleClickButton = () => {
  if (!checkLogin()) return;
  ...
};

const handleClickLike = () => {
  if (!checkLogin()) return;
  ...
};

@lydiacho lydiacho added 🐞 BugFix 버그 수정 👨‍👩‍👧‍👦 Common 공통 컴포넌트 📬 API 서버 API 통신 labels Feb 22, 2024
@lydiacho lydiacho self-assigned this Feb 22, 2024
Copy link

netlify bot commented Feb 22, 2024

Deploy Preview for tattour ready!

Name Link
🔨 Latest commit 0a444d7
🔍 Latest deploy log https://app.netlify.com/sites/tattour/deploys/65d6ce664609a10008ddb8fa
😎 Deploy Preview https://deploy-preview-616--tattour.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
Member

@Yeonseo-Jo Yeonseo-Jo left a comment

Choose a reason for hiding this comment

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

굿굿

@lydiacho lydiacho linked an issue Feb 23, 2024 that may be closed by this pull request
3 tasks
@lydiacho lydiacho merged commit 9344d7c into develop Feb 23, 2024
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
📬 API 서버 API 통신 🐞 BugFix 버그 수정 👨‍👩‍👧‍👦 Common 공통 컴포넌트
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[S1] 로그인 관련 에러 처리
2 participants