• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Node.js, Express 게시판 로그인기능 ajax로 변경 후 로그인 유지가 안됩니다

로그인기능 ajax로 변경 후 로그인 유지가 안됩니다

3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 글쓴이
  • #96263

    박승재
    참가자
    로그인 기능을 기존 submit에서 ajax 사용하는 걸로 변경했습니다.
    다른 분 질문에 달아주신 아래 링크 참고해서 변경했구요, ajax요청 후 결과 메시지 받는 것까진 성공했는데
    passport.deserializeUser << 이친구가 동작을 안하는지 콘솔도 안찍히고 로그인 유지가 안됩니다.
    코드 작성을 잘못한걸까요?
    
    ## 참고한 링크 : https://stackoverflow.com/questions/15711127/express-passport-node-js-error-handling
    
    ## 프론트
    $(function() {
            $('#submit').on('click', (e) => {
              const data = $('#loginForm').serialize();
              const callback = (result) => {
                if(result.success) {
                  location.replace('/');
                } else {
                  alert(result.message);
                }
              }
              
              requestAjax('/login', 'POST', data, callback);
            });
          });
    
    
    // ## 백단
    
    // 로그인 여부 검증과정
    passport.use(new LocalStrategy({
      usernameField: 'id',
      passwordField: 'pw',
      session: true,
      passReqToCallback: true,
    }, async (req, inputId, inputPw, done) => {
       req.app.db.collection('login').findOne({ id: inputId }).then(result => {
        try {
          if (!result) return done(null, false, { message : '존재하지 않는 아이디입니다.' }); // done (서버에러, 사용자정보, 에러메시지)
          if (inputPw == result.pw) {
            return done(null, result);
          } else {
            return done(null, false, { message: '비밀번호가 일치하지 않습니다.' });
          }
        } catch {
          return done(result);
        }
      });
    }));
    
    // 세션 유지를 위한 쿠키생성
    passport.serializeUser((user, done) => {
      done(null, user.id);
    });
    
    passport.deserializeUser((req, id, done) => {
      req.app.db.collection('login').findOne({ id : id }).then(result => {
        result.pw = '';
        done(null, result);
      });
    });
    
    router.post('/login', (req, res, next) => {
      passport.authenticate(
        'local',
        {
          successRedirect: '/',
          failWithError: true
        },
        (err, user, info) => {
          if (err) {
            return next(err);
          }
          if(info) {
            return res.status(202).json({ success: false, message: info.message });
          }
          if (!user) {
            return res.status(401).json({
              errors: [{ msg: '사용자가 존재하지 않습니다.' }],
            });
          }
          
          return res.status(200).json({ success: true, message: '인증 성공' });
        }
      )(req, res, next);
    });
    #96268

    codingapple
    키 마스터
    로그인성공하면 유저정보는 요청.user에 들어있어서 그거 응답시 보내주면 됩니다
    #96276

    박승재
    참가자
    앗 해결됐습니다!
3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠