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

home2 게시판 Node.js, Express 게시판 (회원인증기능 2) 아이디 비번을 DB와 비교하고 세션

(회원인증기능 2) 아이디 비번을 DB와 비교하고 세션

  • 이 주제에는 2개 답변, 2명 참여가 있으며 대영3 년 전에 전에 마지막으로 업데이트했습니다.
3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 글쓴이
  • #39056

    대영
    참가자
    안녕하세요
    해당강의 다듣고 실습하는 도중 문제가 생겼습니다.
    
    1. 강의 마지막 전까지 모든 기능이 다 잘 작동됐는데,
    딱 마지막,
    /mypage 로 이동하는게 모두 실패로 돌아갑니다.
    
     if(req.user){
            next()
        } else{
            res.send('you need to login')
        }
    에서 무조건 you need to log인이 뜨게됩니다.
    실제로 application 패널에서 쿠키도 확인했으나,
    무조건 else의 경우로 이동합니다.
    (req.user가 undefined로 뜹니다.)
    
    
    2.  만약 로그인 페이지에서 아이디나 비번이 틀리면 
    { message: '존재하지않는 아이디요' } 등을 볼 수 있을거라 기대했는데, 
    app.get('/fail',function(req,res){     res.send('fick') })
    바로 실패 페이지로 이동해버립니다.
    그렇다면 저 메세지는 어디에서 볼 수 있는 것일까요?
    
    소스코드는 아래와 같습니다.
    도움 부탁드립니다.
    
    
    
    // 세션 로그인 기능 관련 라이브러리
    const passport = require('passport');
    const LocalStrategy = require('passport-local').Strategy;
    const session = require('express-session')
    app.use(session({secret:'SECRET',resave:true,saveUninitialized:false}))
    app.use(passport.initialize());
    app.use(passport.session())
    app.post('/login', passport.authenticate('local',{failureRedirect:'/fail'}),function(req,res){
        res.redirect('/')
    })
    passport.use(new LocalStrategy({
        usernameField: 'id',
        passwordField: 'pw',
        session: true,
        passReqToCallback: false,
      }, function (inputid, password, done) {
        db.collection('member').findOne({ id:inputid }, function (err, res) {
          if (err) return done(err)
          if (!res) return done(null, false, { message: '존재하지않는 아이디요' })
          if (password == res.pw) {
            return done(null, res)
          } else {
            return done(null, false, { message: '비번틀렸어요' })
          }
        })
      }));
    passport.serializeUser(function(user,done){
        done(null,user.id)
    })
    // 마이페이지 볼 때 사용, 이사람이 어떤 사람인지 해석할 때
    passport.deserializeUser(function(user,done){
        //db에서 위에있는 user.id로 유저를 찾은 뒤에 유저정보를 res에 넣음
        console.log(user)
        db.collection('login').findOne({userid:user},function(err,res){
            done(null,res)
        })  
    })
    app.get('/fail',function(req,res){
        res.send('fick')
    })
    const isLogin = (req,res,next) => {
        console.log(req.user)
        if(req.user){
            next()
        } else{
            res.send('you need to login')
        }
    }
    app.get('/mypage',isLogin,function(req,res){
        res.render('mypage.ejs')
    })
     
    #39068

    codingapple
    키 마스터
    한 곳에선 member컬렉션 한 곳에선 login 컬렉션에서 각각 유저정보를 찾고 있는게 좀 이상해보입니다 
    2번은 flash 메세지 어쩌구 검색해보면 사용가능합니다
    #39077

    대영
    참가자
    덕분에 해결했습니다!!
    감사합니다!^^
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 호 / 개인정보관리자 : 박종흠