Kakao OAuth login 로직 구현
app.get("/auth/kakao", passport.authenticate("kakao"));
const KakaoStrategyConfig = new KakaoStrategy(
{
// REST API KEY
clientID: process.env.KAKAO_CIIENT_ID,
clientSecret: "",
callbackURL: "/auth/kakao/callback",
},
async (accessToken, refreshToken, profile, done) => {
try {
const user = await User.findOne({ kakaoId: profile.id });
if (user) {
// done(null은 에러는 없고) user정보를 전달해준다.
return done(null, user);
} else {
const newUser = new User({
kakaoId: profile.id,
});
await newUser.save();
return done(null, user);
}
} catch (err) {
console.log(err);
}
}
);
passport.use("kakao", KakaoStrategyConfig);
여기까지가 유저의 kakaoId 권한을 요청하고, 권한 부여 후 액세스 코드와 함께 콜백 주소로 리디렉션된다.
이렇게 되면 사용자는 웹을 사용하게 되는 권한을 부여받는다.
리디렉션이 되면 profile 정보는 console.log에 찍힌다.
db에서 kakaoId 같은 게 있으면 그대로 유저 정보를 전달해주며 로그인이 성공하고,
db에 kakaoId 같은 게 없으면 db에 저장을 하고 로그인이 실행된다.
// app.js
app.get(
"/auth/kakao/callback",
passport.authenticate("kakao", {
successReturnToOrRedirect: "/",
failureRedirect: "/login",
})
);
// 아쉽게도 KAKAO는 정식 앱 신청을 받아야지 email 정보를 받아올 수 있다.