프로젝트/팀프로젝트

(React) 카카오 로그인 - 2

백단비 2024. 4. 22. 23:17

Step1. 인가코드 받기

인가코드는 Authorization, 사용자가 동의한 항목에 대해서 접근권한을 획득하는 것이다.

 

일단 kakao developers의 rest API를 사용할 것이기 때문에 

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

카카오 디벨로퍼 사이트에 가입을 한 후 애플리케이션을 추가한다.

 

애플리케이션을 추가하고 추가된 애플리케이션을 클릭하면 앱키가 발급된다. 

 

그리고 앱키가 나온 바로 왼쪽에 앱설정에서 플랫폼을 클린한 후 사이트 도메인을 입력하면 된다. 혼자 공부한다면 localhost만 입력해도 되지만 배포를 할 것이기 때문에 배포사이트 까지 입력해줬다.

카카오 로그인 사용하려면 redirect URI를 등록해야 하는데 이 uri는 인가코드를 받을때 필요하므로 플랫폼에 들어가서 등록해주고,

const KakaoBtn = () => {
  const REST_API_KEY = import.meta.env.VITE_KAKAO_REST_API_KEY;
  const REDIRECT_URI = "http://localhost:5173/kakao-login";
  const kakaoURL = `https://kauth.kakao.com/oauth/authorize?client_id=${REST_API_KEY}&redirect_uri=${REDIRECT_URI}&response_type=code`;
  const kakaoLogin = () => {
    window.location.href = kakaoURL;
  }
  
  return (
  <button onClick={kakaoLogin()}>kakao Login </button>
  )
}

이렇게 해서 카카오 로그인 버튼을 누르면 카카오 로그인 동의 화면을 호출하고, 사용자가 동의를 하면 설정한 redirect URI로 가서 쿼리형태로 코드를 넘겨준다 => redirect URI?code = 발급된 인가코드
그러면 발급된 인가코드를 백엔드에 넘겨주고 엑세스 토큰을 받아오면 된다.

const KakaoLogin = () => {
  const code = new URL(window.location.href).searchParams.get("code");
  //인가코드가 두번받아와져서 오류발생 이슈로 isRequestingToken이라는 제어장치를 넣었다.
  let isRequestingToken = true;
  useEffect(() => {
    const getToken = async () => {
      if (!isRequestingToken) {
        console.log("이미 존재");
        return;
      }
      isRequestingToken = false;
      if (!code) {
        console.log("코드가 없습니다.");
        navigate("/");
        return;
      }
      try {
        const response = await axios.post("/api/auth/oauth2/login", {
          registrationId: "kakao",
          authorizationCode: code,
        });
        const accessToken = await response.headers.authorization;
        if (accessToken) {
          localStorage.setItem("withcon_token", JSON.stringify(accessToken));
          navigate("/");
        }
      } catch (error) {
        console.error("잘못된 접근입니다.", error);
      }
    };
    getToken();
  }, [code]);
  return <Loading />;
};

export default KakaoLogin;

 

원래 카카오에서 주는 AccessToken도 프론트에서 받아오기로 해서 코드를 다 짜놨지만 백엔드분이 그냥 인가코드만 받겠다고 하셔서 인가코드 까지만 받아오는 것으로 마무리 지었다.

320x100

'프로젝트 > 팀프로젝트' 카테고리의 다른 글

위드콘 - 해시태그 구현 (해시태그 생성)  (1) 2024.02.02
(React) 카카오 로그인 - 1  (1) 2024.01.29
위드콘 - 1주차 회고  (0) 2024.01.22
5~6주차 회고  (0) 2023.07.07
React Query  (0) 2023.07.06