게시글
질문&답변
logout시 req.user는 undefined 인 이유.이렇다면 로그인을 안하는 것 아닐까요?
아래 설정을 바꾸니 set-cookie가 되네요. secure: false, 감사합니다. 역시 제가 설정을 이상하게 한 탓이네요. 이렇게 까지 응답을 해주셔서 감사합니다. 그래도 오늘 원인을 알게되어서 덜 찜찜할 것 같습니다. 감사합니다!!!!!!!!!!!!!(사진)
- 0
- 16
- 906
질문&답변
logout시 req.user는 undefined 인 이유.이렇다면 로그인을 안하는 것 아닐까요?
감사합니다. 아무래도 saveUninitialized: true, 이렇게 설정한 것이 틀린거 아닌거 싶네요
- 0
- 16
- 906
질문&답변
logout시 req.user는 undefined 인 이유.이렇다면 로그인을 안하는 것 아닐까요?
죄송합니다. 너무 귀찮게 해드리는 것 같아요. // 환경 설정하기 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
- 0
- 16
- 906
질문&답변
logout시 req.user는 undefined 인 이유.이렇다면 로그인을 안하는 것 아닐까요?
로그아웃 전에는 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 항목이 아래 처럼 없는 것 같습니다. (사진)(사진)
- 0
- 16
- 906
질문&답변
logout시 req.user는 undefined 인 이유.이렇다면 로그인을 안하는 것 아닐까요?
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(); };
- 0
- 16
- 906
질문&답변
logout시 req.user는 undefined 인 이유.이렇다면 로그인을 안하는 것 아닐까요?
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);
- 0
- 16
- 906
질문&답변
logout시 req.user는 undefined 인 이유.이렇다면 로그인을 안하는 것 아닐까요?
[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지 연관수업 deserializeUser 이해하기현재 진도는 여기인데요. 어디까지 더 들으면 되나요? api 서버에서 cors가 나오는 것 같기는 하던데. 그리고 궁금한건데 수업중에 axios에 withCredentials: true 이것을 안하셔도 카카오로 로그인하기 강좌에서 보면 로그인이 잘 가고 set cookie도 브라우저 네트워크 탭에서 잘 되던데...전 axios에 withCredentials: true을 왜 , 어떻게 하는 것인지 미궁입니다.몇일째 여기만 하고 있는데 쉽지가 않습니다. ㅋ
- 0
- 16
- 906
질문&답변
logout시 req.user는 undefined 인 이유.이렇다면 로그인을 안하는 것 아닐까요?
프론트에서 withCredentials: true 넣으라는 말씀은 어디에 넣어야 하나요? app.js에 넣는 것인가요? 제가 아직 cors라는 건 아직 진도를 안 나갔고..지금은 deserializer이해하기 하는 중인데요. 좀 막막해서 다시 여쭤봅니다.
- 0
- 16
- 906