WEB6 - Multi User Auth

로그인 구현

수업소개

로그인 기능을 구현하는 방법에 대해서 알아봅니다. 

 

 

 

강의

 

 

 

소스코드

변경사항

 

댓글

댓글 본문
작성자
비밀번호
  1. 삼고잉
    잘 읽었습니다
  2. 포로리야
    더 좋은 방법을 찾았네요

    pm2 같은 프로세서 관리 프로그램 중에 파일이 수정되면 자동으로 restart하는 기능이 문제였습니다. (pm2는 --watch)

    session.save의 매커니즘이 어떻게 되는지는 모르겠지만

    미들웨어가 sessions 파일을 건드리면 pm2가 파일이 변경된것으로 인식해 재시작 되면서

    session에 serialize가 안되는 문제가 생깁니다.

    pm2 에 --watch를 넣지 않고 수동으로 재시작 해주던가

    pm2 --watch --igonore-watch="sessions/* db.json"

    이렇게 ignore 옵션을 넣어주면 해당 디렉토리의 모든 파일이나 지정된 파일이 수정되어도 무시합니다.
    대화보기
    • 포로리야
      옵션을 객체로 간편하게 넘겨서 사용하는 passport.authenticate 메소드는 메모리에 있는 session 정보가 redirect 되기 전에 파일로 기록되지 않는 것 같습니다.

      아마 비동기식으로 response의 redirect처리가 먼저되어 페이지가 로딩되고 그후에 session 정보가 파일로 저장 되는 것 같네요.

      저는 passport.authenticate에 redirect 되기 전에 파일로 기록하는 custom callback을 만들어서 사용하였습니다.

      router.post('/login_process', function (req, res, next) {
      passport.authenticate('local', function (err, user, info) {
      if (err) {
      return next(err);
      }
      if (!user) {
      req.flash('error', info.message);
      return req.session.save(function (err) {
      if (err) {
      return next(err);
      }
      return res.redirect('/auth/login');
      })
      }
      req.login(user, function (err) {
      if (err) {
      return next(err);
      }
      req.flash('success', info.message);
      return req.session.save(function (err) {
      if (err) {
      return next(err);
      }
      return res.redirect('/');
      });
      });
      })(req, res, next);
      });
    graphittie 자세히 보기