-
카테고리
-
세부 분야
풀스택
-
해결 여부
미해결
첫 로그인 후 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
조현영
지식공유자2024.04.09
req.login(user)를 할 때 사실 req.user = user도 일어납니다. 그래서 serializeUser에서 req.user를 찍어봐도 req.user가 나옵니다. 로그인 이후 라우터부터는 req.user가 비어있어서 deserializeUser의 done 값으로 채워넣습니다.
답변 1