1/19 TIL

taetae·2023년 1월 19일
0

내배캠 TIL

목록 보기
36/48
post-custom-banner

▶ 어떤 문제가 있었는지

기대한 값

{
  "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의 누락으로 첫번 째 값의 아이디만 계속 반환이 된 것 같다.

post-custom-banner

0개의 댓글