Node.JS에서는 Passport를 이용하여
회원가입 / 로그인 / 로그아웃을 수월하게 구현할 수 있다
KAKAO_RESTAPI=[KAKAO_RESTAPI]
KAKAO_REDIRECT_URL=[KAKAO_REDIRECT_URL]
NAVER_CLIENT_ID=[NAVER_CLIENT_ID]
passport와 passport-kakao를 이용하여 소셜로그인으로 접근한 유저의 정보를 인증서버를 통해서 전달받을 수 있다
인증과정을 통해 해당 유저 정보를 얻고 유저에게 가져올 수 있는 정보들을 DB에 저장하도록 구현했다
과정이 성공하여 마무리가 되면 passport로 user 객체가 저장이 된다
const passport = require('passport')
const KakaoStrategy = require('passport-kakao').Strategy;
const User = require('../../models/user')
require('dotenv').config()
passport.use(new KakaoStrategy({
clientID: process.env.KAKAO_RESTAPI,
callbackURL: process.env.KAKAO_REDIRECT_URL,
}, async (_, __, profile, done) => {
// 인자값 (accessToken, refreshToken, profile, done)
try {
const user = await User.findOne({ [`${profile.provider}id`]: profile.id })=
if (!user) {
const newUser = User.socialCreate(
profile.provider,
profile.username,
profile.id,
profile._json.kakao_account.email)
return done(null, newUser);
} else {
return done(null, user);
}
} catch (err) {
done(null, false, `${err}`)
}
}))
passport.authenticate 미들웨어를 통해서 연결하여 라우터를 구성한다
const router = require('express').Router();
const passport = require('passport');
require('./passport.js')
router.get('/kakao', passport.authenticate('kakao'));
router.get('/kakao/callback', (req, res, next) => {
passport.authenticate('kakao', (err, user, info) => {
return res.status(400).json({ message: info });
})(req, res, next);
});
module.exports = router;
Passport 공식문서
http://www.passportjs.org/docs/downloads/html/