[Passport.js] 시리아 레이저의 행위 조사

Node.js에서 Express를 사용하여 로그인 기능을 실현하였다.
그래서 passport,passport-local를 사용했지만 그 행위의 흐름 때문에 필기가 어려웠다.serializeUser,deserializeUser,LocalStrategy 그들이 무엇을 하고 있는지 확인한다.

결론

  • LocalStrategy 시작, 사용자 정보 획득

  • 세션serializeUser에 사용자 정보 저장
  • deserializeUser에서 세션에서 사용자 정보 얻기
  • 매번 deserializeUser 운동하여 로그인 상태 유지
  • 코드


    routes/auth.js
    ...
    const passport = require('passport');
    const LocalStrategy = require('passport-local');
    const cookieSession = require("cookie-session");
    ...
    
    passport.use(new LocalStrategy(function verify(username, password, cb) {
      client
        .query('SELECT * FROM users WHERE username = $1', [username])
        .then(results => {
          if (results.rows.length === 0) {
            console.log('Results is empty. Login failed');
            return cb(null, false);
          }
          if (results.rows[0].password !== password) {
            console.log('Password wrong. Login failed');
            return cb(null, false);
          }
          console.log('LocalStrategy called!', results.rows[0]);
          return cb(null, results.rows[0]);
        })
        .catch(e => {
          return cb(err);
        })
    }));
    
    passport.serializeUser(function(user, cb) {
      process.nextTick(function() {
        console.log('serializer called!', user);
        cb(null, { id: user.id, username: user.username });
      });
    });
    
    passport.deserializeUser(function(user, cb) {
      console.log('deserializer called!', user);
      process.nextTick(function() {
        return cb(null, user);
      });
    });
    
    router.use(
      cookieSession({
        name: "session",
        keys: ['keys'],
        maxAge: 24 * 60 * 60 * 1000,
      })
    );
    router.use(passport.session());
    
    router.post('/login/password', passport.authenticate('local', {
      successRedirect: '/images',
      failureRedirect: '/login'
    }));
    ...
    

    저널


    처리된 로그에 로그인합니다.
    우선 LocalStrategy라고 불리며 인증 논리가 실행 중입니다.
    이어서 serializeUser 세션에 사용자 정보가 저장되었습니다.
    그리고 페이지를 읽을 때마다 deserializeUser라고 불린다.세션에서 매번 사용자 정보를 얻습니다.
    LocalStrategy called! { id: 1, username: 'a', password: 'a' }
    serializer called! { id: 1, username: 'a', password: 'a' }
    
    ...
    
    deserializer called! { id: 1, username: 'a' }
    
    ...
    
    참조
    https://zenn.dev/wkb/books/node-tutorial/viewer/todo_10#세션 설정
    https://knimon-software.github.io/www.passportjs.org/guide/configure/
    https://www.passportjs.org/tutorials/password/session/

    좋은 웹페이지 즐겨찾기