TIL 23 | Passport

action2thefuture·2021년 7월 14일
0

🛸

목록 보기
23/25
post-thumbnail

Passport


Node.JS에서는 Passport를 이용하여
회원가입 / 로그인 / 로그아웃을 수월하게 구현할 수 있다

SocialLogin

.env

KAKAO_RESTAPI=[KAKAO_RESTAPI]
KAKAO_REDIRECT_URL=[KAKAO_REDIRECT_URL]
NAVER_CLIENT_ID=[NAVER_CLIENT_ID]

passport.js(MiddleWare)

Kakao

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}`)
    }
}))

index.js

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/

profile
🐜https://action2thefuture.github.io/🐜

0개의 댓글