๋ด๊ฐ ํ๊ณ ์๋ ํ๋ก์ ํธ๋ Next.js + typeScript + app router๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ์ด๋ค.
์นด์นด์ค ๊ฐํธ ๋ก๊ทธ์ธ์ ์ฒ์์ด๋ผ ์ข ํค๋ฉ์์ง๋ง ์ผ๋จ ์ฐจ๊ทผ์ฐจ๊ทผ ํด๋ณด์๋ค.
1. ์นด์นด์ค ๊ฐ๋ฐ์ ์ฌ์ดํธ์์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฑ๋ก
- ์นด์นด์ค ๊ฐ๋ฐ์ ์ฌ์ดํธ ์ ์ ์ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฑ๋กํฉ๋๋ค.
- REST API ํค์ Redirect URI๋ฅผ ํ์ธํฉ๋๋ค.
์ฌ์ดํธ ๋๋ฉ์ธ ๋ฑ๋ก
๋ฑ๋กํ๋ฌ ๊ฐ๊ธฐ ๋งํฌ ํด๋ฆญ โผ๏ธ
Redirect URL ๋ฑ๋ก
2. OAuth ์ธ์ฆ ํ๋ฆ / API ์๋ํฌ์ธํธ ๊ตฌํ
- ์ฌ์ฉ์๊ฐ ์นด์นด์ค ๋ก๊ทธ์ธ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์นด์นด์ค ์ธ์ฆ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธํฉ๋๋ค.
- ์ฌ์ฉ์๊ฐ ์ธ์ฆ์ ์๋ฃํ๋ฉด ์นด์นด์ค๋ ์ค์ ํ Redirect URI๋ก `code`๋ฅผ ํฌํจํ์ฌ ๋ฆฌ๋ค์ด๋ ํธํฉ๋๋ค.
- ์ด `code`๋ฅผ ์ฌ์ฉํ์ฌ ์ก์ธ์ค ํ ํฐ์ ์์ฒญํฉ๋๋ค.
- ์๋ฅผ๋ค์ด ์๋ํฌ์ธํธ(Redirect URL)๋ ์นด์นด์ค์์ ๋ฆฌ๋ค์ด๋ ํธ๋ ํ `code`๋ฅผ ๋ฐ์์ ์ก์ธ์ค ํ ํฐ์ ์์ฒญํ๋ API ์๋ํฌ์ธํธ์ ๋๋ค. ์ด ์๋ํฌ์ธํธ๋ ์ฌ์ฉ์๊ฐ ์นด์นด์ค ์ธ์ฆ์ ์๋ฃํ ํ ํธ์ถ๋ฉ๋๋ค.
3. API ๊ตฌํ
๋ฐฑ์๋ ์๋ฒ์ ๊ตฌํ๋์ด์๋ค.
4. ๋ก๊ทธ์ธ ํ์ด์ง์์ ์นด์นด์ค ๋ก๊ทธ์ธ ๋ฒํผ ์ถ๊ฐ
<div className="flex">
<Link
href={`https://kauth.kakao.com/oauth/authorize?client_id=${process.env.KAKAO_REST_API_KEY}&redirect_uri=${process.env.KAKAO_REDIRECT_URI_SIGN_IN}&response_type=code`}
>
<Image src="/icons/social/social_kakao.svg" width={72} height={72} alt="์นด์นด์ค ๋ก๊ทธ์ธ" />
</Link>
</div>
5. ํ๊ฒฝ ๋ณ์ ์ค์
.env ํ์ผ์ ์นด์นด์ค REST API ํค์ Redirect URI๋ฅผ ์ค์ ํฉ๋๋ค.
KAKAO_REST_API_KEY={YOUR_REST_API_KEY}
KAKAO_REDIRECT_URI={YOUR_REDIRECT_URI}
๊ณผ์ ์ด ๋๋ฌด ๋ณต์กํ๋ค .. app router๋ ์ฒ์์ด๋ผ ๋ง์ด ํค๋งค์๋ค.
์ง๊ธ ๋ถํฐ๋ ์ ํ๋ก์ ํธ๋ง ํด๋น์ด๋๋ ๋ถ๋ถ์ด๋ ์ฐธ๊ณ ๋ง ํ๊ธธ ๋ฐ๋๋๋ค ~!
์ผ๋จ ๋๋ RedirectUrl์ api/oauth/callback/kakao๋ก ๋ง๋ค์๋ค.
์ ๊ฒฝ๋ก์ route.ts์ ์นด์นด์ค์๋ฒ๋ก ๋ถํฐ ์ธ๊ฐ์ฝ๋๋ฅผ ๋ฐ๊ธ๋ฐ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
const searchParams = req.nextUrl.searchParams;
const code = searchParams.get("code");
์ด๋ ๊ฒ ์์ฑํ๋ฉด ์นด์นด์ค ์์ด์ฝ์ ํด๋ฆญํ์๋
?code= ๋ค์ ์ธ๊ฐ ์ฝ๋๊ฐ ๋ฐ๊ธ๋๋ค.
๋ด๊ฐ ์ฌ์ฉํ๋ swagger API์์๋ ํ์๊ฐ์ ์ Request body์ ์ด๋ฆ, ๋๋ค์ ์ด์ธ์ ์ ์ ์ ๋ณด๋ค๊ณผ ์ฟผ๋ฆฌ์คํธ๋ง์ ๋ณด์ด๋ ์ธ๊ฐ์ฝ๋๋ฅผ token์ ๋ฃ์ด์ฃผ์ด์ผํ๋ค.
๊ทผ๋ฐ ์๋ฌด๋ฆฌ body๋ฅผ ์์ฑํ๊ณ api ์์ฒญ์ํด๋ 400์๋ฌ๊ฐ ๋จ๋๊ฒ .. ๐ก ์๊ณ ๋ณด๋ ์ธ๊ฐ์ฝ๋๋ ์ผํ์ฑ์ธ ๊ฒ์ด์๋ค.
ํ ๋ฒ ์ฌ์ฉํ๋ฉด ๋ ์ด์ ์ ํจํ์ง ์์ผ๋ฉฐ, ๋ณด์์์ ์ด์ ๋ก ์ฌ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค. ์ฌ๊ธฐ์ ์ธ๊ฐ์ฝ๋์ ํน์ง์ ์ดํด๋ณด์.
โ๏ธ ์ธ๊ฐ ์ฝ๋์ ํน์ง
1. ์งง์ ์ ํจ ๊ธฐ๊ฐ
- ์นด์นด์ค ์ธ๊ฐ ์ฝ๋๋ ๋ฐ๊ธ ํ ์ฝ 10๋ถ ๋์๋ง ์ ํจํฉ๋๋ค.
- ์ด ๊ธฐ๊ฐ ๋ด์ ์ก์ธ์ค ํ ํฐ์ผ๋ก ๊ตํํด์ผ ํฉ๋๋ค
2. 1ํ ์ฌ์ฉ ์ ํ
- ์ธ๊ฐ ์ฝ๋๋ ํ ๋ฒ ์ฌ์ฉํ์ฌ ์ก์ธ์ค ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ผ๋ฉด ๋ฌดํจํ๋ฉ๋๋ค.
- ๋์ผํ ์ธ๊ฐ ์ฝ๋๋ฅผ ๋ค์ ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
3. ๋ชฉ์
- ํด๋ผ์ด์ธํธ๊ฐ OAuth 2.0 ์ธ์ฆ ํ๋ฆ์์ ์๋ฒ๋ก๋ถํฐ ์ก์ธ์ค ํ ํฐ์ ์์ ํ๊ฒ ์์ฒญํ๋๋ก ํ๋ ์ฉ๋์ ๋๋ค.
์ธ๊ฐ ์ฝ๋๋ 1ํ์ฑ์ด์ง๋ง, ์ก์ธ์ค ํ ํฐ์ ๋ฐ๊ธ๋ฐ๊ณ ๋๋ฉด ๋ฆฌํ๋ ์ ํ ํฐ์ผ๋ก ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฐฑ์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ฐ๋ผ์ ์ธ๊ฐ ์ฝ๋๋ฅผ ๋ค์ ์์ฒญํ๋ ์ผ์ด ์์ฃผ ๋ฐ์ํ์ง ์๋๋ก ์ค๊ณํ๋ ๊ฒ์ด ์ข์ต๋๋ค.