질문&답변
logout시 req.user는 undefined 인 이유.이렇다면 로그인을 안하는 것 아닐까요?
아래 설정을 바꾸니 set-cookie가 되네요. secure : false , 감사합니다. 역시 제가 설정을 이상하게 한 탓이네요. 이렇게 까지 응답을 해주셔서 감사합니다. 그래도 오늘 원인을 알게되어서 덜 찜찜할 것 같습니다. 감사합니다!!!!!!!!!!!!!
- 좋아요수
- 0
- 댓글수
- 16
- 조회수
- 1044
질문&답변
아래 설정을 바꾸니 set-cookie가 되네요. secure : false , 감사합니다. 역시 제가 설정을 이상하게 한 탓이네요. 이렇게 까지 응답을 해주셔서 감사합니다. 그래도 오늘 원인을 알게되어서 덜 찜찜할 것 같습니다. 감사합니다!!!!!!!!!!!!!
질문&답변
감사합니다. 아무래도 saveUninitialized : true , 이렇게 설정한 것이 틀린거 아닌거 싶네요
질문&답변
죄송합니다. 너무 귀찮게 해드리는 것 같아요. // 환경 설정하기 const dotenv = require ( " dotenv " ) ; dotenv . config () ; const path = require ( " path " ) ; const express = require ( " express " ) ; const passport = require ( " passport " ) ; const passportConfig = require ( " ./passport " ) ; const { sequelize } = require ( " ./models " ) ; const nunjucks = require ( " nunjucks " ) ; const { isNotLoggedIn } = require ( " ./routes/middlewares " ) ; const app = express () ; app . set ( " port " , process . env . PORT || 3004 ) ; passportConfig () ; // logger 설치 const morgan = require ( " morgan " ) ; app . use ( morgan ( " dev " )) ; // cookie & session const cookieParser = require ( " cookie-parser " ) ; const session = require ( " express-session " ) ; // html template engine 설치 app . set ( " view engine " , " html " ) ; nunjucks . configure ( " views " , { express : app , watch : true , } ) ; sequelize . sync ( { force : false } ) . then ( () => { console . log ( " DB가 성공적으로 연결되었습니다. 좋았어!!! " ) ; } ) . catch ( ( err ) => { console . error ( err ) ; } ) ; // parser 설치 app . use ( express . json ()) ; app . use ( express . urlencoded ( { extended : true } )) ; // cookie & session 설정 app . use ( cookieParser (process . env . SECRET_CODE)) ; app . use ( session ( { secret : process . env . SECRET_CODE , resave : false , saveUninitialized : true , cookie : { secure : true , httpOnly : true , }, } ) ) ; app . use (passport . initialize ()) ; app . use (passport . session ()) ; // routing 하기 app . use ( express . static (path . join (__dirname , " public " ))) ; const pageRouter = require ( " ./routes/page " ) ; const authRouter = require ( " ./routes/auth " ) ; app . use ( " / " , pageRouter) ; app . use ( " /auth " , authRouter) ; // 에러 처리하기 app . use ( ( res , req , next ) => { const error = new Error ( `${ req . method } ${ req . url } 라우터가 없습니다. ` ) ; error . status = 404 ; next ( error ) ; } ) ; app . use ( ( err , req , res , next ) => { res . locals . message = res . message ; res . locals . error = process . env . NODE_ENV !== " production " ? err : {}; res . status ( err . status || 500 ) ; res . render ( " error " ) ; } ) ; // 서버 연결 app . listen (app . get ( " port " ) , () => { console . log ( `${ app . get ( " port " ) } 번 port에서 test서버가 실행중입니다. ` ) ; } ) ; .dotenv는 이렇습니다. PORT = 3003 SECRET_CODE = kydcookie KAKAO_ID = 25845e0475ef710d537909191eda47d0
질문&답변
로그아웃 전에는 deserializeUser가 호출 안되는 상황이신거죠? passport>index.js 에서 console.log(user.id)를 찍어보면 1 이라는 id가 잘 찍혀서요. 일단 serializeUser은 잘 되는 것 같습니다. 그 아래 deserializer도 코드에 문제가 없어 보니는데 잘 작동해야 하는 것 같습니다. module.exports = () => { passport . serializeUser ( ( user , done ) => { done ( null, user . id ) ; console . log ( user . id ) ; } ) ; passport . deserializeUser ( ( id , done ) => { User . findOne ( { where : { id } } ) . then ( ( user ) => done ( null, user )) . catch ( ( err ) => done ( err )) ; } ) ; local () ; // kakao(); }; 프론트 브라우저 콘솔에서 애플리케이션 탭 쿠키에는 connect.sid 들어가나요? 안 들어간다면 /auth/login이 잘못 작성된 것입니다. 말씀대로 /auth/login이 잘 못 될 수도 이겠는데 아래와 같이 이게 autherror도 없고 user을 잘 받아와서 return req . login ( user , ( loginError ) => { if ( loginError ) { console . error ( loginError ) ; return next ( loginError ) ; } return res . redirect ( " / " ) ; 위와 같은 코드가 잘 작동하고 이 이후에 / 로 리다이렉트 되는데 이 때 브라우저에 쿠키에 세션을 넣어서 보내는 것으로 이해하고 있습니다. /로 리다이렉트는 잘 되고 다만 set-cookie 항목이 아래 처럼 없는 것 같습니다.
질문&답변
passport>index.js 에 아래와 같이 작성되어 있습니다. const passport = require ( " passport " ) ; const local = require ( " ./localStrategy " ) ; // const kakao = require("./kakaoStrategy"); const User = require ( " ../models/user " ) ; module.exports = () => { passport . serializeUser ( ( user , done ) => { done ( null, user . id ) ; console . log ( user . id ) ; } ) ; passport . deserializeUser ( ( id , done ) => { User . findOne ( { where : { id } } ) . then ( ( user ) => done ( null, user )) . catch ( ( err ) => done ( err )) ; } ) ; local () ; // kakao(); };
질문&답변
passport>index.js 에 작성했고 로그인 한 후 module.exports = () => { passport . serializeUser ( ( user , done ) => { done ( null, user . id ) ; console . log ( user . id ) ; } ) ; 위와 같이 콘솔로 찍어보니 1 이라는 user.id가 잘 찍힙니다. app.js에는 아래와 같이 모듈도 설치하고 passport.initialize와 passport.session 가 적용되었습니다. const passport = require ( " passport " ) ; const passportConfig = require ( " ./passport " ) ; app . use ( session ( { secret : process . env . SECRET_CODE , resave : false , saveUninitialized : true , cookie : { secure : true , httpOnly : true , }, } ) ) ; app . use (passport . initialize ()) ; app . use (passport . session ()) ; // routing 하기 app . use ( express . static (path . join (__dirname , " public " ))) ; const pageRouter = require ( " ./routes/page " ) ; const authRouter = require ( " ./routes/auth " ) ; app . use ( " / " , pageRouter) ; app . use ( " /auth " , authRouter) ;
질문&답변
[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지 연관수업 deserializeUser 이해하기 현재 진도는 여기인데요. 어디까지 더 들으면 되나요? api 서버에서 cors가 나오는 것 같기는 하던데. 그리고 궁금한건데 수업중에 axios에 withCredentials: true 이것을 안하셔도 카카오로 로그인하기 강좌에서 보면 로그인이 잘 가고 set cookie도 브라우저 네트워크 탭에서 잘 되던데...전 axios에 withCredentials: true을 왜 , 어떻게 하는 것인지 미궁입니다. 몇일째 여기만 하고 있는데 쉽지가 않습니다. ㅋ
질문&답변
프론트에서 withCredentials: true 넣으라는 말씀은 어디에 넣어야 하나요? app.js에 넣는 것인가요? 제가 아직 cors라는 건 아직 진도를 안 나갔고..지금은 deserializer이해하기 하는 중인데요. 좀 막막해서 다시 여쭤봅니다.