๋ฐ์ํ
1.์นด์นด์ค ๊ฐ๋ฐ์ ์ฌ์ดํธ์์ web์ฉ ์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ฌ
์ฌ์ดํธ ๋๋ฉ์ธ์ ๋ก์ปฌ์ด๋ผ ๋ก์ปฌ๋ก ์ง์
2. ๋ฑ๋กํ๋ฌ๊ฐ๊ธฐ ๋ฒํผ์ ๋๋ฌ, ๋ก๊ทธ์ธ ์ฑ๊ณตํ ๊ฐ ๊ณณ ์ง์
3. ์๋์ ๋์ํญ๋ชฉ ๋ฃ์
(๋ํ๋ ค๋ฉด ๋น์ฆ๋์ค ๊ณ์ ๋ณํ ํ์)
4. js ์ฑํค ๋ณต์ฌ ํด๋๊ณ html ๋ ๋ค์ ๋ฃ์
| ํด๋๊ตฌ์ฑ
| index.html (๋ก๊ทธ์ธ ํ ๊ณณ ์ฝ๋)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>๋งค์ธ ํ์ด์ง</title>
</head>
<body>
<a href="#0" id="kakaoLogin"><img src="./kakao_login.png" alt="์นด์นด์ค๊ณ์ ๋ก๊ทธ์ธ" style="height: 100px;" /></a>
<p>ํด๋น Live Demo๋ ํ
์คํธ์ฉ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ์์ค ์ฝ๋์ '๋ณธ์ธ API ํค'๋ฅผ ๋ฃ์ด์ผ ์ ๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.</p>
<script src="https://developers.kakao.com/sdk/js/kakao.js"></script>
<script>
// Kakao SDK ์ด๊ธฐํ
window.Kakao.init('bdddddddddddd4');
// ๋ณธ์ธ js api ํค ๋ฃ์ด์ผํจ
// ๋ก๊ทธ์ธ ํจ์
function kakaoLogin() {
window.Kakao.Auth.login({
scope: 'profile_nickname, profile_image', // ๋๋ค์๊ณผ ํ๋กํ ์ด๋ฏธ์ง (๋ค๋ฅธ๊ฑฐ ์ฐ๋ ค๋ฉด ์นดํก๊ฐ๋ฐ์์ ๋น์ฆ๋์ค ์ ์ฒญํด์ email๋ฑ๋ ๊ฐ์ ธ์ฌ ์์์)
success: function(response) {
const token = response.access_token;
// ์ฌ์ฉ์ ์ ๋ณด ์์ฒญ
window.Kakao.API.request({
url: '/v2/user/me',
success: (res) => {
const kakao_account = res.kakao_account;
const userInfo = {
nickname: kakao_account.profile.nickname,
profile_image: kakao_account.profile.profile_image_url,
};
// ์ฌ์ฉ์ ์ ๋ณด์ ํ ํฐ์ sessionStorage์ ์ ์ฅ
sessionStorage.setItem('AccessKEY', token);
sessionStorage.setItem('UserInfo', JSON.stringify(userInfo));
// ๋ก๊ทธ์ธ ์ฑ๊ณต ํ ๋ฆฌ๋ค์ด๋ ์
window.location.href = '/ex/kakao_login.html';
},
fail: (error) => {
console.error('์ฌ์ฉ์ ์ ๋ณด ์์ฒญ ์คํจ', error);
}
});
},
fail: function(error) {
console.error('๋ก๊ทธ์ธ ์คํจ', error);
}
});
}
// ๋ก๊ทธ์ธ ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ ์ฐ๊ฒฐ
const login = document.querySelector('#kakaoLogin');
login.addEventListener('click', kakaoLogin);
</script>
</body>
</html>
| kakao_login.html (๋ก๊ทธ์ธ ํ ํ redirection ๋ ๊ณณ ์ฝ๋)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Redirect URI</title>
</head>
<style>
#profile {
width: 400px;
height: 400px;
background-color: antiquewhite;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 20px;
text-align: center;
}
#profile img {
width: 100px;
height: 100px;
border-radius: 50%;
object-fit: cover;
}
</style>
<body>
<div id="profile">
<!-- ํ๋กํ ์ ๋ณด ํ์ -->
<p>๋ก๋ฉ ์ค...</p>
</div>
<a href="#0" id="kakaoLogout">๋ก๊ทธ์์</a> |
<a href="#0" id="secession">ํํด</a>
<script src="https://developers.kakao.com/sdk/js/kakao.js"></script>
<script>
// Kakao SDK ์ด๊ธฐํ
window.Kakao.init('bdddddddddddd4');
// ๋ณธ์ธ js api ํค ๋ฃ์ด์ผํจ
// sessionStorage์์ ์ฌ์ฉ์ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
const userInfo = JSON.parse(sessionStorage.getItem('UserInfo'));
const profileDiv = document.querySelector('#profile');
// ์ฌ์ฉ์ ์ ๋ณด ํ์
if (userInfo) {
profileDiv.innerHTML = `
<img src="${userInfo.profile_image}" alt="ํ๋กํ ์ด๋ฏธ์ง" />
<p>๋๋ค์: ${userInfo.nickname}</p>
`;
} else {
profileDiv.innerHTML = `<p>์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ค์ง ๋ชปํ์ต๋๋ค.</p>`;
}
// ๋ก๊ทธ์์ ๊ธฐ๋ฅ
function kakaoLogout() {
if (!Kakao.Auth.getAccessToken()) {
console.log('Not logged in.');
return;
}
Kakao.Auth.logout(function() {
alert('๋ก๊ทธ์์ ์๋ฃ');
sessionStorage.clear(); // ๋ชจ๋ ์ธ์
๋ฐ์ดํฐ ์ ๊ฑฐ
window.location.href = '/';
});
}
// ํํด ๊ธฐ๋ฅ
function secession() {
Kakao.API.request({
url: '/v1/user/unlink',
success: function() {
alert('ํํด ์๋ฃ');
sessionStorage.clear();
window.location.href = '/';
},
fail: function(error) {
console.error('ํํด ์คํจ', error);
},
});
}
// ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ฐ๊ฒฐ
document.querySelector('#kakaoLogout').addEventListener('click', kakaoLogout);
document.querySelector('#secession').addEventListener('click', secession);
</script>
</body>
</html>
| ํ์ผ ๋ค์ด
kakaoLogin-๊ณต์ ์ฉ-apiํค๋ณธ์ธ๊ฒ+์น์ฃผ์๋ฑ๋กํ์ฌ์ฌ์ฉ.zip
0.02MB
๋ฐ์ํ