2 글 보임 - 1 에서 2 까지 (총 2 중에서)
-
글쓴이글
-
2023년 1월 24일 21:16 #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')); });
-
글쓴이글
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
- 답변은 로그인 후 가능합니다.