WEB5 - Express passport.js

passport.js 세션이용

수업소개

Passport.js는 내부적으로 express-session을 이용합니다. 여기서는 두개의 미들웨어를 연결하는 방법을 알아봅니다. 

 

 

pm2, node-mon과 같은 자동 재시작 도구를 사용하는 경우 세션 정보가 저장이 안되는 현상이 발생할 수 있습니다. 이유는 sessions 디렉토리에 파일이 추가되면 node가 재시작 되기 때문입니다. 이를 해결하기 위해서 sessions 디렉토리에 대해서는 재시작을 하지 않도록 조치해야 합니다. 아래 수업을 참고해주세요. 

https://opentutorials.org/course/3332/22110

 

 

 

강의 1

 

 

 

소스코드

변경사항

 

 

 

강의 2

 

 

 

강의 3

 

 

 

소스코드

변경사항

댓글

댓글 본문
작성자
비밀번호
  1. nodejs + passport.js + cluster + mongodb 사용중인데
    클러스터 다른 worker로 바뀔때마다 로그인 풀려서

    connect-mongo 사용해서 해결했습니다.
  2. 후루룽
    조금 어렵지만 흥미진진!! 감동적이에요
  3. nomadlife
    저도 비슷한 문제가 있어서, 저는 로그아웃 후에 남아있던 쿠키를 강제로 지워버렸네요. (https://github.com......437) 증상은 해결이 됐는데,,실제 서비스에서도 이렇게 해도 되는건가요?

    nodemon 으로 ignore 옵션주는법은 nodemon main.js --ignore sessions/*.json 하거나,
    아니면 아예 package.json 파일에다가 추가해줘도 된다고 하네요.
    "nodemonConfig": {
    "ignore": ["sessions/*.json"]
    }
    (https://stackoverflow.com......les)
  4. egoing
    정확한 진단입니다. 저도 수업에 내용을 보강할께요. 고맙습니다~
    대화보기
    • 포로리야
      더 좋은 방법을 찾았네요

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

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

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

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

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

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

      이렇게 ignore 옵션을 넣어주면 해당 디렉토리의 모든 파일이나 지정된 파일이 수정되어도 무시합니다.
      대화보기
      • 포로리야
        successRedirect 시에 세션정보가 local store에 저장되지 않는거 같네요.

        passport.authenticate('local', {
        failureRedirect: '/auth/login'
        }),
        (req, res, next) => {
        req.session.save((err) => {
        if (err) {
        next(err);
        }
        res.redirect('/');
        })
        }
        );

        이런 콜백으로 save 시킬수도 있는데 찜찜하네요
      • 조언 감사합니다.
        그러나 해당 코드를 반영해도 동일한 오류가 발견됩니다.
        제 생각에는 기존 코드에도, 작성해주신 코드 모두 로그인 처리가 되었으나,
        ui에 반영되는 타이밍이 이상한 것 같습니다.
        egoing님의 코드를 다운받아서 실행해봐도 동일한 오류가 있는데,
        왜 그런지 모르겠습니다. ㅠㅠ
        대화보기
        • ltaers@naver.com
          저도 같이 공부하는 입장이라서 제가 한것이 맞는 방법인지는 모르겠습니다.
          하지만 조금이나마 도움이 될까 적습니다.
          main.js에 session중에 saveUninitialized가 true로 되어있을겁니다. 이것을 false로 바꾸고 store:new FileStore({path:'./sessions',logFn:function(){}})로 수정했습니다. lonFn을 빼실경우에는 console에 에러가 나와서 lonFn으로 뺏습니다.
          true로 할경우 session을 미리 만드는것이도 false로 할경우는 session을 저장할때에 생성되게 한것입니다.


          logout의 경우는 아래와 같이 작성했습니다.
          아래와 같이 작성하면 session파일에 json파일 자체를 없어집니다.
          router.get('/logout', function (request, response) {
          request.logout();
          request.session.destroy(function(err){
          response.redirect('/');
          });
          });
          대화보기
          • 저도 동일한 오류가 있네요 ㅠㅠ 바로 화면이 바뀌지 않고, refresh를 해야 login ui가 변경되어 있는데,
            어떻게 오류를 잡을 수 있을까요?
            대화보기
            • ltaers@naver.com
              login시에 바로 로그인이 확인이 안되고 web을 한번 눌러줘야 로그인이 적용이됩니다.
              그리고 어쩔때에는 session에 passport가 저장이 되고 어떤경우에는 passport가 저장이 안됩니다.
              또한 한번 로그아웃을 할 경우 로그인이 되지 않는 경우가 발생하는데 이건 어떤식으로 해결해야할까요?
              ps. 그래서 제가 짠코드가 이상한지 한번 이고잉님의 코드를 다운받아서 실행하였는데 같은증상이 발생합니다ㅠㅠ 제 컴퓨터의 문제인가요 ?? ㅜㅜ
            버전 관리
            egoing
            현재 버전
            선택 버전
            graphittie 자세히 보기