WEB6 - Multi User Auth

로그인 구현

수업소개

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

 

 

 

강의

 

 

 

소스코드

변경사항

 

댓글

댓글 본문
작성자
비밀번호
  1. jo_onc
    저는 ignore 기능을 이용해도 문제가 해결되지 않아서 알려주신 방법을 적용해보니 아주 잘 작동하네요.
    감사합니다!
    대화보기
    • 삼고잉
      잘 읽었습니다
    • 포로리야
      더 좋은 방법을 찾았네요

      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 자세히 보기