생활코딩

Coding Everybody

코스 전체목록

닫기

passport.js 세션이용

수업소개

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

 

 

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

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

 

 

 

강의 1

 

 

 

소스코드

변경사항

 

 

 

강의 2

 

 

 

강의 3

 

 

 

소스코드

변경사항

댓글

댓글 본문
작성자
비밀번호
  1. victorjames2303
    Thanks for sharing this post, this is really very nice informative post.
    I will regularly follow your blog

    http://usetupnorton.com/
  2. 인걸
    deserialize 함수가 호출 안되는 문제

    1. CORS 허용
    2. 라우트 세션에서
    cookie: {
    secure: false
    }
    둘 중 다 하거나 하나를 해서 해결
  3. node짱짱
    여보세요! 간단히 말해서이 게시물에 대한 좋은 정보를 얻기 위해 엄청난 엄지 손가락을주고 싶습니다. 더 빨리 블로그에 다시 올 것 같습니다. Regards :- https://nortonsetup-key.com | http://msofficesetup.org | http://mymcafeeactivate.com
  4. 난마돌
    passport를 가장 잘 설명해주는 강의같습니다 . 최고!
  5. Specialist
    어제 밤에 deserialize 호출되는건 해결했습니다.
    https://opentutorials.org......134 에 예전 passport강의가 있길래 봤는데 댓글을 보니까 저와 비슷한 문제를 겪으신 분들이 많아서 그거 참고해서 deserialize는 나오게 했어요.
  6. 어떻게 도와드려야할지...deserialize 함수가 호출은 되고 있나요?
    대화보기
    • Specialist
      도와주세요... 저는 deserialize 부분의 console.log가 안나와요. 로그인 버튼 누르면 deserialize까지 같이 나와야 하잖아요. 근데 계속 안나와요 뭐가 문제인지 모르곘어요!! 도와주세요!!
    • Specialist
      이걸 8시간 째 하고 있는데도 안되네요... 진짜 미쳐버리겠네...
    • 세션에 저장하는건 문제가 안되는데 세션에 저장하기도 전에 redirect를 해서 그렇습니다.
      대화보기
      • jo_onc
        저도 오늘 다시 확인해보니 세션이 저장될 때가 있고 안 될때가 있고..
        왜 이럴까요?
        vscode, pm2 사용하는데, 제 PC의 문제일까요?
        대화보기
        • jo_onc
          pm2 start main.js --watch --ignore-watch="data/* sessions/*" --no-daemon
          적용해봐도, 로그인 후 갱신을 한 번 더 해야만 로그인 표시가 되네요..
          해결방법 아시는 분 계신가요?
          vscode, pm2 사용하고 있습니다.
        • nodejs + passport.js + cluster + mongodb 사용중인데
          클러스터 다른 worker로 바뀔때마다 로그인 풀려서

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

          nodemon 으로 ignore 옵션주는법은 nodemon main.js --ignore sessions/*.json 하거나,
          아니면 아예 package.json 파일에다가 추가해줘도 된다고 하네요.
          "nodemonConfig": {
          "ignore": ["sessions/*.json"]
          }
          (https://stackoverflow.com......les)
        • 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 자세히 보기