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

home2 게시판 Node.js, Express 게시판 라우터 분리시에 req.user값을 공유하고 싶습니다.

라우터 분리시에 req.user값을 공유하고 싶습니다.

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

    김동훈
    참가자
    react,express로 로그인/회원가입이 있는 사이트를 만들고 있습니다.
    server.js에서 모든 passport 설정을 하고 passport.deserializeUser  passport.serializeUsedml 설정을 다 했습니다.
    app.()~로 요청을 하면 req.user으로 잘 값이 받아와 지는데,
    다른 라우터로 연결하고 router.()~로 요청을 해서 req.user값을 받아오고 싶습니다.
    
    요약:라우터를 분리시켜도 req.user값을 공유하고 싶습니다.
    아래는 server.js 코드입니다.
    
    const express = require('express');
    const path = require('path');
    const app = express();
    const mongo = require('mongodb').MongoClient;
    const mongoose = require('mongoose');
    const env = require('dotenv').config();
    const cors = require('cors');
    const cookieParser = require('cookie-parser');
    const User = require( './models/userModel.js');
    const session = require('express-session');
    const passport = require('passport');
    const LocalStrategy = require('passport-local').Strategy;
    passport.use(new LocalStrategy({
      usernameField: 'id',
      passwordField: 'pw',
      passReqToCallback: false,
    }, function (inputid, inputpw, done) {
    	
      User.findOne({id:inputid}, (err,userInfo)=>{
    	  if (!userInfo) return done(null,false,{message:'존재하지않는 아이디',isSuceess:false}); 
    	  else if (err) return done(err);
    	  
    	  userInfo.comparePw(inputpw,(err,isMatch)=>{
    		if (!isMatch) return done(null, false, { message: '비밀번호가 틀렸습니다',isSuceess:false })
    		  
    		//로그인 할때마다 업데이트 일자 변경
    		userInfo.updatedAt = new Date();		  
    		userInfo.save((err,result)=>{
    			if (err) return done(err);
    			return done(null, userInfo)
    		})
          	
    	})
    	 	  
      })		
    
    }));
     
     
    app.use(cors({
        origin: '*',// 접근 권한을 부여하는 도메인
        method:['GET','POST','DELETE'],
    	credentials: true,
    }));
    app.use(express.json());
    app.use(express.urlencoded({extended: true}));
    app.use(cookieParser());
    app.use('/shop', require('./router/shop.js') );
    app.use(express.static(path.join(__dirname,'bongdal/build')));
     
    app.use(session({
    	secret : process.env.SECRETCODE,
    	resave : false, 
    	saveUninitialized: false,
    	session:true,
    	cookie:{
    		httpOnly:true,
    		secure:false,
    	},
    })); //pasport정보 생성
    app.use(passport.initialize()); //req에 passport설정
    app.use(passport.session()); //req.session에 passport정보 저장
    mongoose.set('strictQuery',true); //스키마에서 설정한 필드만 바꿀수있게 설정
    mongoose.connect(process.env.DB_URL, {useNewUrlParser: true})
    	 .then(()=>{console.log('연결 성공/ 포트:'+process.env.PORT)})
    	 .catch((err)=>{console.error(err)});
    
    app.listen(process.env.PORT, () => console.log(`Server listening on port ${process.env.PORT}`));
     
     
     
     
    app.post('/register',async (req,res)=> {
    	
    	
    	
    	const input = await new User(req.body);
    	
    	
    	
    	User.findOne({id:input.id},(err,result)=>{
    		if (err) return res.json({isSuceess:false,err});
    		if (result) return  res.json({isOverlap:true});
    		if (!result){
    			
    			input.save((err,result)=>{
    			
    			if (err) return res.json({isSuceess:false,msg:err});
    			return res.status(200).json({isSuceess:true});
    			})
    		}
    			
    		
    		
    	})
    	
    		
    })
     
     
    app.post('/login' , passport.authenticate('local', {failureRedirect : '/fail'}),(req,res,next)=> {
    	
    	res.json({isSuceess:true,id:req.user.id}); 
    })
    app.get('/fail',(req,res)=>{
    	res.json({isSuceess:false});
    })
     
     
    app.get('/islogin',(req,res)=>{
    	
    	if (!req.user){
    		res.status(200).json({isSuceess:false});
    	}
    	else{ 
        res.status(200).json({isSuceess:true,id:req.user.id});
      	} 
      
    })
     
    app.get('/logout',(req,res)=>{
    	req.logout(function(err) {
        if (err) { return next(err); }
        res.redirect('/');
      });
    })
    passport.serializeUser(function (user, done) {
     
      	return done(null, user.id)
    });
    passport.deserializeUser(function (userid, done) {
    	
      	User.findOne({id:userid}, (err,userInfo)=>{
    		if (err) return done(err);
    		
    		
    		return done(null, userInfo);
    	})
    	
    	
    });
    app.get('*', function (요청, 응답) {
      응답.sendFile(path.join(__dirname,'/bongdal/build/index.html'));
    });
     
     
    
    
    
    
    		
    	
    #64056

    codingapple
    키 마스터
    그 라우터 api들에도 로그인했니 미들웨어 넣어봅시다
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 호 / 개인정보관리자 : 박종흠