카카오 로그인 과정
1. 카카오에 인가 코드 발급 요청
2. 인가 코드를 백엔드에 알려줌
3. 로그인 처리를 한 후에 jwt 토큰 발급
4. 토큰을 로컬 스토리지에 저장
kakao developers를 참고해서 공부하자!
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
1. 애플리케이션 등록
1. 애플리케이션 추가하기
공식문서 > 내 애플리케이션 > 애플리케이션 추가하기
2. 웹 플랫폼 추가하기
내 애플리케이션 > 앱 설정 > 플랫폼으로 들어가서 Web 선택
도메인을 입력해야 하는데 우선,, 테스트 환경인 http://localhost:3000 를 추가해준다.
배포 후 도메인도 여기서 추가하면 정상적으로 서비스에 적용할 수 있음!
3. 카카오 로그인 활성화 하기
내 애플리케이션 > 제품설정 > 카카오 로그인 탭으로 이동해서
활성화 설정을 ON 으로 바꿔주어야 한다. 이거 안했다가,.,, 에러나서 열받았고,,,얼굴 빨개졌음,,ㅎ
2. Redirect URI 설정
http://localhost:3000/oauth
위와 같이 설정해준다.
API KEY 환경변수로 설정해주기
리액트 프로젝트 폴더 바로 아래에 .env 파일 생성
추가한 애플리케이션 클릭 > 앱 키 > REST API.키 값을 다음과 같이 환경 변수로 설정
REACT_APP_REST_API_KEY="키 값"
변수명을 반드시 위와 동일하게 설정 해야함!
3. 인가 코드 발급 받기
GET /oauth/authorize?client_id=${REST_API_KEY}&redirect_uri=${REDIRECT_URI}&response_type=code HTTP/1.1
Host: kauth.kakao.com
Login.jsx (로그인 페이지)
import React from "react";
import styles from "./styles/Login.module.css";
import kakaoBtn from '../assets/images/kakao_login_medium_wide.png';
export default function Login() {
const REST_API_KEY = process.env.REACT_APP_REST_API_KEY;
const REDIRECT_URI = "http://localhost:3000/oauth";
const KAKAO_AUTH_URI = `https://kauth.kakao.com/oauth/authorize?client_id=${REST_API_KEY}&redirect_uri=${REDIRECT_URI}&response_type=code`;
return (
<div className={styles.body}>
...생략
{/* 로그인 버튼을 누르면 인가코드를 발급 받는 링크로 이동 */}
<a href={KAKAO_AUTH_URI}>
<img
className={styles.kakaoBtn}
src={kakaoBtn}
/>
</a>
</div>
);
}
내 애플리케이션 > 제품 설정 > 카카오 로그인 > 동의 항목 탭에서
동의 항목을 설정하면 제법,,, 동의를 구하는 느낌이 난다...
4. 서버에서 토큰 받기
Oauth라는 컴포넌트를 생성해서 그 위에 작성
import React, { useEffect } from 'react';
import { useNavigate } from 'react-router-dom';
import axios from 'axios';
export default function Oauth() {
// params로 받은 인가 코드를 code 변수에 저장
const code = new URL(window.location.href).searchParams.get('code');
const navigate = useNavigate();
useEffect(() => {
(async () => {
try {
// 토큰 axios 요청
const res = await axios.get(`api/code=${code}`);
const token = res.headers.authorization;
// 받아온 토큰을 로컬 스토리지에 token으로 저장
window.localStorage.setItem('token', token);
// home으로 이동
navigate('/');
} catch (e) {
console.error(e);
navigate('/');
}
})();
}, []);
return (
<div>
</div>
);
}
5. 백엔드에 토큰 보내기
// 로컬 스토리지에 저장된 토큰을 받아와서
const token = window.localStorage.getItem('token');
try {
const res = await axios.post('api/post', data, {
// 헤더로!!
headers: {
Authorization: token,
},
});
} catch (e) {
console.error(e);
}
};
예전에 아무것도 모른 채로 난생처음 플젝 했을때가 떠오른다,,,
그때 바라보기만 했던 게 지금 어마어마한 도움이 되는 중ㅠ
그럼 다음 플젝때는 더 잘할 수 있겠지~ 오예
'Project > zum:go' 카테고리의 다른 글
[React] axios로 다중 파일 전송 - 이미지, JSON (0) | 2023.02.07 |
---|---|
[React] 타이머 기능 구현하기 - setInterval (0) | 2023.02.05 |
[React] 실시간 채팅 구현하기 - STOMP (0) | 2023.02.03 |
[React] swiper로 이미지 슬라이드 구현하기 (0) | 2023.01.28 |
[React] React에서 Firebase 사용하기 - Google 로그인 (0) | 2023.01.25 |
댓글