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

home2 게시판 Node.js, Express 게시판 강사님 passport 세션저장..

강사님 passport 세션저장..

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

    정중식
    참가자
    갑자기 passport 세션 저장이안되는데.. 혹시 이렇게 코드짜는거 맞을까요?
    
    
    
    const passport = require('passport');
    const bcrypt = require('bcryptjs');
    const LocalStrategy = require('passport-local').Strategy;
    const User = require('../models/User');
    module.exports = function () {
      // 세션 저장 코드
      passport.serializeUser(function (user, done) {
        console.log('야');
        done(null, user.id);
      });
      // 세션 해석 코드 , req.user
      passport.deserializeUser(async (id, done) => {
        const user = await User.findOne({ _id: id });
        if (user) {
          done(null, user.id);
        }
      });
      passport.use(
        new LocalStrategy(
          {
            usernameField: 'userId',
            passwordField: 'password',
            session: true,
            passReqToCallback: false,
          },
          async (userId, password, done) => {
            const user = await User.findOne({ userId });
            if (!user || user === null) {
              return done(null, false, {
                errors: [{ msg: '사용자가 존재하지 않습니다.' }],
              });
            }
            const isMatch = await bcrypt.compare(password, user.password);
            if (!isMatch) {
              return done(null, false, {
                errors: [{ msg: '비밀번호가 다릅니다.' }],
              });
            }
            return done(null, user);
          }
        )
      );
    };
    
    
    passport.use(
        new LocalStrategy(.... 
    이부분은 잘 동작하는데,
    
    아래 부분이 동작을 안하는거같습니다. 콘솔찍어도 아무런 반응이없구요..
      // 세션 저장 코드
      passport.serializeUser(function (user, done) {
        console.log('야');
        done(null, user.id);
      });
      // 세션 해석 코드 , req.user
      passport.deserializeUser(async (id, done) => {
        const user = await User.findOne({ _id: id });
        if (user) {
          done(null, user.id);
        }
      });
     
    #64927

    정중식
    참가자
    server.js
    
    
    
    require('dotenv').config();
    const express = require('express');
    const connectDB = require('./config/db');
    const path = require('path');
    const passport = require('passport');
    const session = require('express-session');
    const loginPassport = require('./middleware/loginPassport');
    // const isLogin = require('./middleware/auth');
    const app = express();
    connectDB();
    app.use(express.urlencoded({ extended: true }));
    app.use('/public', express.static('public'));
    loginPassport();
    app.use(
      session({
        secret: process.env.SESSION_SECRET,
        resave: true,
        saveUninitialized: false,
      })
    );
    app.use(passport.initialize());
    app.use(passport.session());
    app.set('view engine', 'ejs');
    app.get('/', function (req, res) {
      console.log(req.user);
      res.render('index.ejs', { user: req.user });
    });
    app.use('/', require('./routes/users'));
    app.use('/', require('./routes/posts'));
    app.listen(process.env.PORT, function () {
      console.log('listening on port 8080');
    });
    
    
    혹시 몰라 server.js 코드도 첨부했습니다.
    계속 스택오버플로우 뒤지면서 원인을 찾고있는데..  의견좀 여쭙고싶습니다
    #64940

    정중식
    참가자
    추가로 이렇게 순서를 바꿔봐도 세션저장코드가 안먹는거같습니다.
    
    
    app.use(
      session({
        secret: process.env.SESSION_SECRET,
        resave: true,
        saveUninitialized: false,
      })
    );
    loginPassport();
    app.use(passport.initialize());
    app.use(passport.session());
    #64948

    정중식
    참가자
    질문이 좀 보기 지저분하네요 죄송합니다. 그래도 원인을 찾았습니다.
    
    
    // 로그인
    router.post('/login', (req, res, next) => {
      passport.authenticate('local', (err, user, info) => {
        if (err) {
          return next(err);
        }
        // loginPassport.js에서 인증 실패한 메시지가 나옴
        if (info) {
          return res.status(401).json(info);
        }
        if (!user) {
          return res.status(401).json({
            errors: [{ msg: 'authentication fail!' }],
          });
        }
        return res.send({ success: true, message: 'authentication succeeded' });
      })(req, res, next);
    });
    
    이 부분이 잘못인데요, 근데 왜 잘못인지 모르겠습니다.
    음.. 맞게고쳐주려면 어떤식으로 바꿔줘야하는지 갈피를 못잡겠습니다..
    #64949

    정중식
    참가자
    진짜 마지막.. 해결완료
    제 입맛대로 바꾼다고바꿧던거를 삭제하면안될부분을 삭제하고 사용했었네요
    // 로그인
    router.post('/login', function (req, res, next) {
      passport.authenticate('local', function (err, user, info) {
        if (err) {
          return next(err);
        }
        // loginPassport.js에서 인증 실패한 메시지가 나옴
        if (info) {
          return res.status(401).json(info);
        }
        if (!user) {
          return res.status(401).json({
            errors: [{ msg: 'authentication fail!' }],
          });
        }
        req.login(user, (loginErr) => {
          if (loginErr) {
            return next(loginErr);
          }
          return res.send({ success: true, message: 'authentication succeeded' });
        });
      })(req, res, next);
    });
     
5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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