소개 :
카카오 로그인은 카카오계정과 애플리케이션(이하 앱)을 연결하고 토큰을 발급받아카카오 API를 사용할 수 있도록 하는 기능입니다.
토큰은 사용자를 인증하고 카카오 API 호출 권한을 부여하는 액세스 토큰(Access Token)와 액세스 토큰을 갱신하는 데 쓰는 리프레시 토큰(Refresh Token)이 있습니다
NAME | 설명 | Kakao API |
---|---|---|
로그인 | 카카오계정 정보로 사용자를 인증하고 API 호출 권한을 얻습니다. | O |
연결 | 카카오계정과 앱을 연결, 사용자가 해당 앱에서 카카오 API를 사용할 수 있게 합니다. | O |
가입 | 카카오계정 정보로 로그인한 사용자를 서비스 데이터베이스(DB)에 회원으로 등록합니다. | X |
서비스 자체 구현 | ||
로그아웃 | 로그아웃 요청한 사용자의 토큰을 만료시킵니다. | O |
연결 끊기 | 카카오계정과 서비스 사이의 연결을 해제합니다. | O |
탈퇴 | 회원 정보를 삭제하고 서비스를 더 이상 이용하지 않습니다. | X |
서비스 자체 구현 | ||
토큰 | API 호출 권한을 증명하며, 로그인을 통해 발급받습니다. | O |
로그인 과정
토큰 종류 | 권한 | 유효기간 |
---|---|---|
AccessToken | 사용자를 인증 | REST API : 6 시간 |
RefreshToken | 일정 기간 동안 다시 인증 절차를 거치지 않고도 액세스 토큰 발급을 받을수 있게 해줍니다. | 2달 |
유효기간 1달 남은 시점부터 갱신 가능 |
로그인 과정
Node.js 의 미들웨어인 passport, passport-kakao를 이용하였습니다.
const passport = require("passport");
const kakaoStrategy = require("passport-kakao").Strategy;
passport.use(
"kakao",
new kakaoStrategy(
{
clientID: process.env.kakaoKey,
callbackURL: "/oauth/kakao/callbak",
},
(accessToken, refreshToken, profile, done) => {
/** @type {User}*/
const User = {
name: profile.username,
provider: profile.provider,
providerId: profile.id,
email: profile._json.kakao_account.email,
team: [],
};
return done(null, User);
},
),
);
router.get("/kakao", check.isLogined, passport.authenticate("kakao"));
router.get(
"/kakao/callbak",
passport.authenticate("kakao", {
failureRedirect: "/error",
}),
async (req, res) => {
console.log(">>> kakaoLogin");
/** @type User*/
const User = req.user;
const loginCollection = await db_module.userDbCollection();
/** @type User*/
const loginUser = await loginCollection.findOne({
email: User.email,
});
if (!loginUser) {
await loginCollection.insertOne(User);
}
req.user.connectTime = Date();
const token = await jwt.sign(User.email);
req.user.token = token;
// res.json({ success: true, msg: req.user });
res.redirect("http://localhost:3000");
},
);