소셜 로그인 - 카카오 로그인(2)

JUN-KIM·2023년 8월 22일
0

지난 글에서 카카오 Developers에 접속하여 설정하는 법에 대해 알아보았다.
이번 글에서는 필자가 프로젝트에서 사용하였던 코드와 간단한 설명을 덧붙히겠다.

우선 React 프로젝트를 실행하고 나면 .env 파일이 보일 것이다.

🔥 .env 파일은 반드시 최상위 디렉토리에 존재해야한다. 따라서 .gitignore 파일에서

# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local

위처럼 설정해주어야 후에 깃허브에 업로드 시 다른 사람들에게 보이지 않게 할 수 있다.

본론으로 돌아가보자.

".env" 파일에서 REST API 키와 REDIRECT URI를 설정해준다.

# 카카오
REACT_APP_REST_API_KEY = "카카오에서 발급받은 REST API 키"

REACT_APP_KAKAO_REDIRECT_URI = "카카오에서 내가 설정한 REDIRECT URI"

보다 자세한 설명을 위해 코드 전체를 첨부하겠다.

import React from "react";

const KakaoLogin = () => {
  const KAKAO_API_KEY = process.env.REACT_APP_REST_API_KEY;
  const KAKAO_REDIRECT_URI = process.env.REACT_APP_KAKAO_REDIRECT_URI;
  const KAKAO_URL = `https://kauth.kakao.com/oauth/authorize?client_id=${KAKAO_API_KEY}&redirect_uri=${KAKAO_REDIRECT_URI}&response_type=code`;

  return (
    <img
      alt="카카오 로그인"
      src={kakao}
      onClick={() => (window.location.href = KAKAO_URL)}
    />
  );
};

export default KakaoLogin;

REST API 키와 REDIRECT URI를 이용하여 KAKAO_URL을 설정해주었다.

또 하나의 중요한 과정이 필요한데 CallBack 해줄 js 파일을 하나 더 만들어야했다.

똑같이 코드 전문을 첨부하되, 일부 코드는 말로 대신 설명하겠다.

import axios from "axios";
import { useEffect } from "react";
import { useNavigate } from "react-router-dom";
import { API_URL } from "../Constant";
import { useRecoilState, useSetRecoilState } from "recoil";
import {
  tokenState,
  nicknameState,
  emailState,
  idState,
} from "../../recoils/Recoil";

const KakaoCallback = () => {
  const navigate = useNavigate();
  
  `//////////////////코드 생략///////////////////`

  
  useEffect(() => {
  
  // 필자는 code를 url로부터 분리하여 백엔드로 보내야했기에 아래와 같이 let code를 따로 분리했다.
    let code = new URL(window.location.href).searchParams.get("code");
    
    axios
      .get(`${API_URL}/login/oauth2/callback/kakao`, { params: { code } })
      .then((response) => {
        const { jwtToken, nickname, email, point, id } = response.data.data;
        
        // Recoil을 이용한 상태 관리
        `//////////////////코드 생략///////////////////`

        // 로컬 스토리지에 토큰, 아이디 등 저장
        console.log("로그인 성공!");
        console.log("Token:", jwtToken);
        console.log("Nickname:", nickname);
        console.log("email:", email);
        console.log(code);

        navigate("/"); // 메인 페이지로 이동
      })
      .catch((err) => {
        console.log(err);
        console.log(err.response);
      });
  }, []);

  return <div>Loading...</div>;
};

export default KakaoCallback;

🔥 주의할 점!!!
로그인에 성공한 것 같아보여도 항상 console.log를 찍는 습관을 들이자!

거의 모든 과정이 끝났다.

이제 App.js로 돌아가

import KakaoCallback from "./components/SocialLogin/KakaoCallback";

<Route path="/login/oauth2/callback/kakao" element={<KakaoCallback />} />

위 코드들을 추가해주면 끝이다!!

물론 로그인을 하기 위한 버튼은 스스로 만들어야하며, uri나 구현 방식은 백엔드와 꾸준히 소통해야한다는 점 잊지 않기를 바란다.

최대한 간결하게 설명하기 위해 반말을 사용한 점, 사과의 말씀 드립니다.
혹여나, 궁금한 점이 생기신다면 "댓글" 또는 "kop981020@naver.com"으로 연락주시면 최대한 빠른 시간 내에 답변드리겠습니다!

추후, 다른 소셜로그인 글로 찾아뵙겠습니다.

지금까지 읽어주셔서 감사합니다 😄

profile
네 안녕하세요 :)

0개의 댓글