• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

첫 로그인 후 req.user.id 사용이 어텋게 가능한지 궁금합니다.

24.04.09 00:02 작성 24.04.09 00:03 수정 조회수 70

0


..// user.js
router.post("/login", isNotLoggedIn, (req, res, next) => {
  passport.authenticate("local", (err, user, info) => {

    // ... 
    return req.login(user, async (loginErr) => {
      if (loginErr) {
        console.error(loginErr);
        return next(loginErr);
      }
      const fullUserWithoutPassword = await User.findOne({
        where: { id: req.user.id },
        // ... 
      });
      return res.status(200).json(fullUserWithoutPassword);
    });
  })(req, res, next);
});

 

// index.js

const passport = require("passport");
const local = require("./local");
const { User } = require("../models");

module.exports = () => {
  passport.serializeUser((user, done) => {
    done(null, user.id);
  });


  passport.deserializeUser(async (id, done) => {
    console.log(`deserializeUser`)
    try {
      const user = await User.findOne({ where: { id } });
      done(null, user); // req.user안에 넣어줌
    } catch (error) {
      console.error(error);
      done(error);
    }
  }); 

  local();
};

첫 로그인 할 때는

serializeUser만 실행되고,

그 이후 요청 부터 deserialzeUser가 실행되어

req.user에 db 테이블에 user객체가 저장되는 걸로 이해했습니다.

첫 로그인 할 때는 deserializeUser가 실행이 안되어서 req.user가 저장이 안된 상태일텐데 어텋게

req.user.id로 fullUserWithoutPassword 에
값을 할당할 수 있는지 궁금합니다.

 

 

답변 1

답변을 작성해보세요.

1

req.login(user)를 할 때 사실 req.user = user도 일어납니다. 그래서 serializeUser에서 req.user를 찍어봐도 req.user가 나옵니다. 로그인 이후 라우터부터는 req.user가 비어있어서 deserializeUser의 done 값으로 채워넣습니다.

감사합니다!