Passport.js

Jong-uk·2023년 4월 13일
0

엘리스 온라인 학습

목록 보기
25/39
post-custom-banner

passport.js?

  • Express.js 어플리케이션에 간단하게 사용자 사용자 인증 기능을 구현하게 도와주는 패키지
  • 유저 세션 관리 및 다양한 고르인 방식 추가 가능

passport-local

  • passport는 다양한 로그인 방식을 구현하기 위해 strategy라는 인터페이스를 제공
  • strategy 인터페이스에 맞게 설계된 다양한 구현체들이 있음(facebook, google)
    passport-local은 username, password를 사용하는 로그인의 구현체

로그인 구현하기

  1. 로그인 화면 구성하기
  • check 함수로 로그인 유효성 검사!!!
  • email값, pw값 가져와서 이메일,pw input이 비어있는지 확인
  1. passport-local strategy로 로그인 구현하기
    cosnt config = {
      usernameField : 'email',
      passwordField:'password'
    };
    const local = new LocalStrategy(config, async(email, password, done) => {
      try{
        const user = await User.findOne({email});
        if(!user){
          throw new Error("회원을 찾을 수 없습니다.");
        }
        if(user.password !== password){
          throw new Error("비밀번호가 일치하지 않습니다.");
        }
        
        done (null, {
          shortId : user.shortId,
          email : user.email,
          name : user.name,
        });
      } catch (err) {
        done(err, null);
      })
  2. passport.js 설정하기
  • 작성한 strategy를 passport.use를 이용해 사용하도록 선언!
  • passport.use를 이용해 strategy를 사용하도록 선언 후 passport.authenticate를 사용해 해당 strategy를 이용해 요청을 처리
    const local = require("./strategied/local');
    passport.use(local);
  1. passport로 요청 처리하기
--- routes/auth.js ---
router.post('/',
 passport.authenticate('local');
--- app.js ---
const session = require('express-session');
app.use(session({
 secret: 'secret',
 resave: false,
 saveUninitialized: true
})); app.use(passport.initialize()); app.use(passport.session()); app.use('/auth', authRouter);
  • session 유져 활용하기
    • session을 이용해 user를 사용할 때에는 serializeUser와 deserializeUser를 설정해주어야 함
    • 이는 세션에 user 정보를 변환하여 저장하고 가져오는 기능을 제공
      ex) 회원 id만 세션에 저장하고, 사용 시 회원정보를 디비에서 찾아서 사용
    passport.serializeUser((user, callback) => {
      callback(null, user);
    });
    passport.deserializeUser((obj, callback) => {
      callback(null, obj);
    });
  • 로그아웃
    • passport는 req.logout 함수를 통해 세션의 로그인 정보를 삭제하여, 로그아웃 기능을 구현할 수 있음
     router.get('/logout', ...{
       req.logout();
       res.redirect('/');
     });
  • 로그인 확인 미들웨어
    • 로그인을 필수로 설정하고 싶을 경우, 미들웨어를 사용하여 체크할 수 있음
    function loginRequired(req, res, next) {
     if (!req.user) {
       res.redirect('/');
       return; 
      }
      next(); 
    }
    app.use('/posts', loginRequired, postsRouter);
profile
안녕하세요! 만나서 반갑습니다.
post-custom-banner

0개의 댓글