4 글 보임 - 1 에서 4 까지 (총 4 중에서)
-
글쓴이글
-
2022년 10월 11일 01:03 #49784
프엔스터디참가자안녕하십니까 덕분에 늘 실력향상을 하고 꿈을 (아직) 잃지 않은 현 컴공 졸업반이자 프론트 취준생입니다.. 마이페이지에서 미들웨어가 제대로 동작하지 않는 것 같아 질문을 드립니다. 로그인은 가능하고, 쿠키도 정상적으로 생성이 됩니다. 하지만 늘 '로그인이 되지 않았다'고 else로 이동을 합니다. 시험삼아 if else문의 조건을 서로 바꿔 else에 next를 넣어보니 마이페이지로 잘 이동하는 것으로 보아, DB 시리얼라이즈 관련해선 문제가 없다고 생각이 됩니다 관련 코드 첨부 하겠습니다. [server.js]
// 로그인하기 const passport = require('passport'); const LocalStrategy = require('passport-local').Strategy; const session = require('express-session');
// 미들웨어 : 요청-응답 중간에 뭔가 실행되는 코드, app.use나 post의 두번째인자 app.use(session({secret : '비밀코드', resave : true, saveUninitialized: false})); app.use(passport.initialize()); app.use(passport.session());
app.get('/login', function(req, res) { res.render('login.ejs') }) app.post('/login', passport.authenticate('local', { failureRedirect : '/fail' }),function(req, res) { res.redirect('/') })
// 위 post 동작에서 실행한 passport 덕분에 실행되는 코드 passport.use(new LocalStrategy({ // 우리가 폼에다가 작성한 name들 usernameField: 'id', passwordField: 'pw', // session 정보를 저장할 것이느냐 session: true, // 아이디, 비밀번호 말고도 다른 정보 검증시 사용 // 아래 콜백함수에 인자 한 개(req) 더 넣고 검사 req.body를 통해 검사 passReqToCallback: false, }, function (입력한아이디, 입력한비번, done) { //console.log(입력한아이디, 입력한비번); //1. DB에서 데이터 찾고 db.collection('login').findOne({ id: 입력한아이디 }, function (에러, 결과) { //에러처리 if (에러) return done(에러) // 2. 입력한 아이디 자체가 없으면 실행할 코드 // done( 서버에러, 성공시 사용자 DB 데이터, { 에러메세지 } ) if (!결과) return done(null, false, { message: '존재하지않는 아이디요' }) // 3. DB에 ID가 있으면 비번 검사 if (입력한비번 == 결과.pw) { return done(null, 결과) } else { return done(null, false, { message: '비번틀렸어요' }) } }) }));
// 로그인 성공 -> 세션정보 생성 -> 마이페이지 방문시 세션검사
// id를 이용해서 세션을 저장시키는 코드 'user엔 로그인의 결과가 쏙 들어감' passport.serializeUser(function(user, done) { // user.id에 세션이 만들어짐 // 세션 데이터를 만들고 세션의 id 정보를 쿠키로 보냄 done(null, user.id) });
// 이 세션 데이터를 가진 사용자를 찾을 때 즉, 마이페이지 이용시 사용 // 로그인한 유저의 세션아이디를 바탕으로 개인정보를 DB에서 찾는 역할 passport.deserializeUser(function(아이디, done) { db.collection('login').findOne( { id : 아이디 }, function(에러, 결과) { done(null, 결과) // 여기서 결과엔 { id : 입력한 id, pw : 입력한 pw, 이름 : 이름 } 등 내가 넣은 정보들이 저장 // 결과에 담긴 데이터들은 app.get('/mypage')에서 요청.user (req.user) 에 담겨있음 }) })
-
글쓴이글
4 글 보임 - 1 에서 4 까지 (총 4 중에서)
- 답변은 로그인 후 가능합니다.