기대한 값
{
"id": 28,
"userId": 5,
"postId": "5",
"updatedAt": "2023-01-19T14:06:55.918Z",
"createdAt": "2023-01-19T14:06:55.918Z"
}
문제가 생긴 값
{
"id": 27,
"userId": 1,
"postId": "5",
"updatedAt": "2023-01-19T13:21:09.606Z",
"createdAt": "2023-01-19T13:21:09.606Z"
}
like api를 만들고 rest client로 좋아요 기능을 실행했을 때, 로그인 후 토큰 값을 받아 userId값을 지정해 줬음에도 1번 값으로만 리턴이 되는 문제.
로그인 기능에서 문제인 지 확인함. (X)
like에서 어떻게 id값을 받아 오는지 확인함, 확인 했더니
(sequelize) Warning: Model attributes (nickname) passed into finder method options of model User, but the options.where object is empty. Did you forget to use options.where?
Executing (default): SELECT `id`, `nickname`, `password`, `confirm`, `createdAt`, `updatedAt` FROM `users` AS `User` LIMIT 1;
5 1
위와 같이 Id값을 1로 받아오는 것을 확인
일단 로그인은 잘 되지만 authmiddleware에서 오류가 있는 것 같아서 다시 확인 해 봤더니
sequelize 문법에 오류가 있는 걸 발견하고 수정했다.
// 수정 전
try {
const { nickname } = jwt.verify(token, JWT_SECRET_KEY);
const user = await User.findOne({ nickname });
res.locals.currentUser = user;
next();
// 수정 후
try {
const { nickname } = jwt.verify(token, JWT_SECRET_KEY);
const user = await User.findOne({ where: { nickname } });
res.locals.currentUser = user;
next();
findOne에서 where을 사용해 해당 nickname을 찾아야 했는데 where의 누락으로 첫번 째 값의 아이디만 계속 반환이 된 것 같다.