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

home2 게시판 Node.js, Express 게시판 mysql db 에 session 저장하기 ㅠㅠ

mysql db 에 session 저장하기 ㅠㅠ

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

    조원희
    참가자
    const sessionStore = new MySQLStore({
      host: "어쩌구",
      port: 3306,
      user: "어쩌구",
      password: "어쩌구",
      database: "어쩌구",
      expiration: 30000, // 세션 만료 시간
      createDatabaseTable: true,
    });
     
    
    
    app.use(session({
      secret: 'djWjrnwjWjrn',
      resave : false,
      saveUninitialized : true,
      store: sessionStore,
      cookie : { maxAge : 60 * 60 * 1000 }
    }));
    
    
    app.use(passport.initialize());
    app.use(passport.session());
    passport.serializeUser(function(user, done){
      const jsonUser = JSON.parse(JSON.stringify(user));
      done(null, jsonUser.user_id )})
    
    
    passport.deserializeUser(async (id, done) => {
      
      try {
        const user = await getUserFromDB(id, db);
        delete user.user_pass;
        const jsonUser = JSON.parse(JSON.stringify(user));
        done(null, jsonUser); 
        console.log('유저db',jsonUser)
      } catch (err) {
        done(err, null);
      }
    });
    async function getUserFromDB(id, db) {
      return new Promise((resolve, reject) => {
        const sql = 'SELECT * FROM user_inf WHERE user_id = ?';
        db.query(sql, [id], (error, results) => {
          if (error) {
            reject(error);
          } else {
            if (results.length > 0) {
              resolve(results[0]); 
            } else {
              reject(new Error('사용자를 찾을 수 없습니다'));
            }
          }
        });
      });
    }
    passport.use(new LocalStrategy(
      {
        usernameField: 'user_id', //폼에서 인풋 네임필드
        passwordField: 'user_pw'  //폼에서 인풋 네임필드
      },
      async (username, password, done) => {  //로컬 전략 콜백  //유저가 입력한 아이디와비번이 심어짐 
          console.log('LocalStrategy', username, password);  
        try{
          const sql = 'SELECT * FROM user_inf WHERE user_id = ?';
          const params =[username];
        
          db.query(sql,params, async (err, result)=>{
            const user = result[0];
            result = user;
            
            if(err){return done(err)}  
            if(!result){
              console.log(1)
              return done(null, false, {message: '아이디 틀림'})
            }
            if(result.user_pass === password){
              console.log(2)
              return done(null, result)
            }else{
              console.log(3)
              return done(null,false, {message : '비번불일치'})
            }
            });
        }catch (err){
          return done(err);
        }
      }
    ));
    app.post('/login', (req,res, next)=>{
      passport.authenticate('local', (err,user,info)=>{
        if(err) return res.status(500).json(err)
        if(!user) return res.status(401).json(info.message)
        req.login(user, (err)=>{
          if(err) return next(err)
          res.redirect('/')
        })
      })(req,res,next)
    });
    
    
    코드는 이렇습니다
    app.get('/checkSession', (req, res) => {
      if (req.isAuthenticated()) {
        console.log('체크',req.user)
        // 세션이 활성화된 경우 사용자 정보를 확인합니다.
        res.send('User session active: ' + req.user.user_id);
      } else {
        res.send('User not logged in.');
      }
    });
    체킹을 해봐도 정보는 보여집니다
    다만 세션정보가 db 에 저장이 되지 않습니다
    db mysql 입니다
    db에는 session 테이블은 만들어집니다
    db에 세션 집어넣기만 현재 2주째입니다
    해결을 못하고있어요 ㅠㅠ
    도와주세요 선생님
    #103464

    codingapple
    키 마스터
    app.use(passport.initialize()) 를 윗줄로 옮겨봅시다
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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