앞선 포스팅인 oAuth 로그인 구현(1) 게시글에서 인가 코드를 받아오는 것을 구현했는데, 오류가 있어 정정하는 포스팅이다.
kakao devel 문서에는 인가 코드가 서비스 서버로 받는 스텝으로 나오는데, (1) 구현에선 서비스 클라이언트에서 요청하고 받은 후에 서비스 서버로 보내는 작업으로 구현하려했다.
이 경우 우려된 문제 발생 가능성은 다음 2가지가 있었다.
const handleClick = useCallback(() => {
axios.get(`${API_HOST}/login/kakao`).then(response => {
console.log(response.data);
window.location.assign(response.data);
});
}, []);
// ...
<div onClick={handleClick} onKeyDown={handleKeyDown} role="button" tabIndex={0}>
<img src={kakaoLogin} alt="login_kakao" />
</div>
// ...
서버가 인가코드 요청부터 받는것까지 하므로 서버 구현이 주요하게 추가되었다.
// .env
KAKAO_CLIENT_ID="/* 각자 등록한 앱 아이디 */"
KAKAO_AUTH_URL="https://kauth.kakao.com/oauth/authorize"
KAKAO_REDIRECT_URL="http://localhost:3000/oauth/code/redirect" // 예시
// index.ts
import dotenv from 'dotenv';
dotenv.config();
router.get('/login/kakao', (req, response) => {
return response.json(
`${process.env.KAKAO_AUTH_URL}?response_type=code&client_id=${process.env.KAKAO_CLIENT_ID}&redirect_uri=${process.env.KAKAO_REDIRECT_URL}`
);
});
router.get('/oauth/redirect', (req, response) => {
console.log('hi');
console.log(req.params);
console.log(req.query);
/**
* 토큰 요청 및 쿠키 생성
*/
// 클라이언트 홈으로 리다이렉트 하는 부분은 임시코드
return response.redirect('http://localhost:9000');
});
결과적으로 인가코드는 서버쪽 리다이렉트 url로 전달되므로 코드에서 인가코드를 가져갈 일은 없어진다.