생활코딩

Coding Everybody

로그인 구현

토픽 생활코딩 > WEB > WEB2 - Node.js > Node.js - Express > 다중 사용자

수업소개

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

 

 

 

강의

 

 

 

소스코드

변경사항

 

댓글

댓글 본문
  1. 김윤석
    21.04.29
  2. jeisyoon
    2021.03.28 로그인 구현 - OK
  3. 김명일
    express-session의 session store를 lowdb-session-store모듈로 변경하니 로그인 하자마자 바로 뜨도록 됩니다.
    https://www.npmjs.com......ore

    main.js에 해당 부분을 추가하고
    const LowdbStore = require("lowdb-session-store")(session);
    app.use(session({
    secret: '@23t45623!#513res',
    resave: false,
    saveUninitialized: false,
    store: new LowdbStore(db.get('sessions'), {
    ttl: 86400
    })
    }))
    db.js에서
    db.defaults({ users: [], sessions: [] }).write();
    위와같이 sessions를 추가해주면 잘 되네요.
  4. 생활둘기
    2021 2 17
  5. ldhan0715
    wwwe님 뭐하는 분이시죠? 모든 강의에 긴 양의 URL들을 적어놓고 이게 뭐하는 짓입니까? 게다가 URL은 모두 확인해보니 빠짐없이 피싱사이트고요. 당신같은 사람 때문에 인터넷이 더러워지는 겁니다.
    대화보기
    • 쑤우
      수강완료. 감사합니다~
    • 착한얼굴에그러치모탄태도
      문제는
      pm2 start main.js --watch --no-daemon --ignore-watch="sessions/* db.json" 으로 해결하면 됨
    • 착한얼굴에그러치모탄태도
      감사합니다
    • 굼벵이
      완료
    • 넘좋다
      deserializeUser 미들웨어의 위치를 바꾸는건 어떨까요?
    • 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);
          });