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

home2 게시판 Node.js, Express 게시판 passport logout 했을때 redirect 관련질문입니다..

passport logout 했을때 redirect 관련질문입니다..

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

    이준우
    참가자

     

    app.get('/logout', function(req,res){
      console.log('logout')
      req.logout();
      req.session.destroy((function(){
        res.cookie('connect.sid','',{maxAge:0})
        res.redirect('/');
      })

    )});

    이렇게 로그아웃을 했는데 res.redirect가 실행되지 않는거같습니다 ..ㅠ  어떻게해야할까요

    #32796

    codingapple
    키 마스터

    (function() 왼쪽 소괄호같은게 아마 오타인가봅니다 

    #32853

    이준우
    참가자

    const express = require('express');
    const path = require('path');
    const app = express();
    const MongoClient = require('mongodb').MongoClient;

    const bodyParser = require('body-parser');//요청.뭐뭐 하기좋게만들어주는 라이브러리
    app.use(bodyParser.urlencoded({extended : true}));
    const http = require('http').createServer(app);
    app.use(express.json());
    var cors = require('cors');
    app.use(cors());

    //passport 설치
    const passport = require('passport');
    const LocalStrategy = require('passport-local').Strategy;
    const session = require('express-session');

    app.use(session({secret : '비밀코드', resave : true,saveUninitialized: false}));
    app.use(passport.initialize());
    app.use(passport.session());

    var db;
    MongoClient.connect('mongodb+srv://admin:@cluster0.1dazw.mongodb.net/myFirstDatabase?retryWrites=true&w=majority',{ useUnifiedTopology: true }, function(에러, client){
      if (에러) return console.log(에러);
      db = client.db('project')
     
      http.listen(8070, function () {
        console.log('listening on 8080')
      });
     
    })

    app.use(express.static(path.join(__dirname, 'reactproject/build')));

    app.get('/', function (요청, 응답) {
      응답.sendFile(path.join(__dirname, '/reactproject/build/index.html'));
    });

    //로그인
    app.post('/login', passport.authenticate('local', {failureRedirect : '/fail'}),function(req , res){
      console.log('hello login')
      db.collection('registerNav').find().toArray().then(result =>{
        var logincount = [...result];
        console.log(logincount[0].count);
        if(logincount[0].count== 1){
          db.collection('registerNav').updateOne({name : 'logincount'},{ $inc :{count:1}},function(에러,결과){
            res.json(logincount[0].count)
          })
        }else if(logincount[0].count== 2){
          db.collection('registerNav').updateOne({name : 'logincount'},{ $inc :{count:-1}},function(에러,결과){
            res.json(logincount[0].count)
            })
          }
        })
      res.redirect('/')
           

    })

    //로그인Nav 변경
    app.get('/loginNav',function(req,res){
      db.collection('registerNav').find().toArray().then(result =>{
        var logincount = [...result];
        console.log(logincount[0].count);
        res.json(logincount[0].count)
        // if(logincount[0].count== 1){
        //   db.collection('registerNav').updateOne({name : 'logincount'},{ $inc :{count:1}},function(에러,결과){
        //     res.json(logincount[0].count)
        //   })
        // }else if(logincount[0].count== 2){
        //   db.collection('registerNav').updateOne({name : 'logincount'},{ $inc :{count:-1}},function(에러,결과){
        //     res.json(logincount[0].count)
        //   })
        // }
       
       
       
      })

    })

    //로그인 중복체크

    function 로그인중복체크(요청,응답, next){
      if(요청.user){
        next()
      } else{
        응답.send('로그인안하셨는데요')
      }
    }

    passport.use(new LocalStrategy({
      usernameField: 'loginId',
      passwordField: 'loginPw',
      session: true,
      passReqToCallback: false,
    }, function (입력한아이디, 입력한비번, done) {
      console.log(입력한아이디, 입력한비번);
      db.collection('register').findOne({ _id: 입력한아이디 }, function (에러, 결과) {
        console.log(결과)
        if (에러) return done(에러)

        if (!결과) return done(null, false, { message: '존재하지않는 아이디요' })
        if (입력한비번 == 결과.비밀번호) {
          return done(null, 결과);
        } else {
          return done(null, false, { message: '비번틀렸어요' })
        }
      })
    }));

    //로그아웃
    app.get('/logout', function(req,res){
      console.log('logout')
      req.logout();
      req.session.destroy(function(){
        res.cookie('connect.sid','',{maxAge:0})
        res.redirect('/');
      })
    });
     
    //위의 결과가 user로 들어옴
    passport.serializeUser(function(user,done){
      console.log(user)
      done(null,user._id)
    });

    //이세션 데이터로 DB에서 찾는법
    passport.deserializeUser(function(아이디,done){
      // DB에서 위에서 있는 USER.ID 로 유저를 찾은 뒤에 유저 정보를  {} 에 넣음
      db.collection('register').findOne({_id : 아이디},function(에러, 결과){
        done(null,결과)
      })
     
    });

    //회원가입
    app.post('/register', function(요청,응답){
      console.log('전송왔음?')
      db.collection('register').insertOne({_id: 요청.body.pw, 비밀번호 : 요청.body.id}, function(에러,결과){
        console.log('저장완료');
       
      })
      응답.redirect('/')
    })

    //글작성
    app.post('/write',function(요청,응답){
      console.log('통신왔다!')
      db.collection('counter').findOne({name:'게시물갯수'},function(에러,결과){
        var totalPost = 결과.totalPost;
        var writePost = {_id: totalPost+1, title:요청.body.title , 내용:요청.body.내용 , date : new Date().toLocaleDateString() }
        db.collection('post').insertOne(writePost,function(에러,결과){
          console.log('저장완료')
            db.collection('counter').updateOne({name : '게시물갯수'},{ $inc :{totalPost:1}},function(에러,결과){
              if(에러){
                  return console.log(에러)
              }else{
                  console.log('성공')
                  db.collection('post').find().toArray().then((결과)=>{
                    응답.json(결과[결과.length-1])
                  })
              }
          })
        })
      })

    })

    //메인페이지 글보내주기
    app.get('/data',function(요청,응답){
      db.collection('post').find().toArray().then((결과)=>{
        응답.json(결과)
      })
    })

    // react router를 쓰면 이기능을 써야함
    app.get('*', function (요청, 응답) {
      응답.sendFile(path.join(__dirname, '/reactproject/build/index.html'));
    });

     

     

    저 괄호 지우고 했는데도 리다이렉트가 되면서 새로고침이 되어야하는데 안됩니다 ㅠ

    전체 코드 한번올려봅니다.. 로그아웃부분입니다 ㅠ

    그리고 혹시 res.redirect 랑 res.~~ 를 같이 쓸수 있는 방법은없을까요 ..?

    #32897

    codingapple
    키 마스터

    req.logout();
    res.clearCookie('connect.sid');
    res.redirect('/');

    logout 요청시 이거 실행해봅시다 

4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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