강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

쾌할한 전복님의 프로필 이미지
쾌할한 전복

작성한 질문수

[리뉴얼] React로 NodeBird SNS 만들기

로그인 문제 해결하기

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

작성

·

264

·

수정됨

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 값으로 채워넣습니다.

감사합니다!

쾌할한 전복님의 프로필 이미지
쾌할한 전복

작성한 질문수

질문하기