Node.js 서버 구조4: passport 모듈과 로그인 구현

코드 구조

콘솔

  1. 콘솔에 ' npm i passport passport-local passport-kakao bcrypt ' 입력하여 모듈 설치

app.js

  1. 모듈 가져오기
const passport = require('passport');
  1. 작성한 모듈 가져오기
const passportConfig = require('./passport');

3.작성한 모듈 실행하기

passportConfig(); // 패스포트 설정
  1. 모듈 passport의 메서드를 미들웨어로서 실행하기
  • passport.initialize 미들웨어: 요청에 passport 설정을 심는다
  • passport.session 미들웨어: req.session 객체에 passport 정보를 저장한다 (단, express-session 미들웨어보다 뒤에 연결해야 함)
app.use(passport.initialize());
app.use(passport.session());

passport/index.js

  1. 로그인 개요
    (로그인의 과정)
    1)라우터를 통해 로그인 요청이 들어옴
    2)라우터에서 passport.authenticate메서드 호출
    3)로그인 전략 수행
    4)로그인 성공 시 사용자 정보 객체와 함께 req.login 호출
    5)req.login메서드가 passport.serializeUser 호출
    6)req.session에 사용자 아이디만 저장
    7)로그인 성공
    (로그인 이후의 과정)
    1)요청이 들어옴
    2)라우터에 요청이 도달하기 전에 passport.session 미들웨어가 passport.deserializeUser 메서드 호출
    3)req.session에 저장된 아이디로 데이터베이스에서 사용자 조회
    4)조회된 사용자 정보를 req.user에 저장
    5)라우터에서 req.user객체 사용 가능
  • 로그인 시의 동작: strategy
  1. 모듈과 작성한 모듈, 모델 가져오기
const passport = require('passport')
const local = require('./localStrategy');
const kakao = require('./kakaoStrategy');
const User = require('../models/user');
  1. 모듈 내보내기 + 함수 2개 사용하기
  • passport.serializeUser:
    사용자 정보 객체를 세션(req.session 객체)에 아이디로 저장. 로그인 시 실행됨.
  • passport.deserializeUser:
    세션에 저장한 아이디를 통해 사용자 정보 객체를 불러옴
    매 요청시 실행됨. passport.session 미들웨어가 이 메서드를 호출.
  • cf. done 함수 :
    첫 번째 인수> 에러 발생 시 사용
    두 번째 인수> 저장하고 싶은 데이터
module.exports = () => {
  passport.serializeUser((user, done) => {
    done(null, user.id);
  });
  passport.deserializeUser((id, done) => {
    User.findOne({ where: { id } })
      .then(user => done(null, user))
      .catch(err => done(err));
  });
  local();
  kakao();
};

좋은 웹페이지 즐겨찾기