혼자 고민해보기_ 개발/TIL (Today I Learned)

20230808(화)_ 트렐로 프로젝트 진행

nuri-story 2023. 8. 8. 22:33

금일 달성 항목

1) 로그인, 회원가입, 구현

2) ERD Model 수정


문제 해결 과정 1 - 패스워드 인증 확인

[문제]

    if (!user || password !== user.password) {
      return { code: 412, data: "닉네임 또는 패스워드를 확인해주세요." };
    }

위 부분에서 걸려 로그인이 구현되지 않는 이슈가 있었습니다.

user.service.js

  logIn = async ({ nickname, password }) => {
    const user = await this.usersRepository.findNickname({ nickname });
    if (!user || password !== user.password) {
      return { code: 412, data: "닉네임 또는 패스워드를 확인해주세요." };
    }
    try {
      const token = jwt.sign(
        {
          userId: user.userId,
        },
        process.env.JWT_SECRET_KEY
      );
      return { code: 200, data: "로그인에 성공하였습니다.", token };
    } catch (error) {
      return { code: 400, data: "로그인에 실패하였습니다." };
    }
  };

 

[시도]

console.log로 들어오는 데이터들을 모두 확인해보았는데 잘들어오고 있어서 데이터를 불러오는거에는 이상이 없었습니다.

 

[해결]

튜터님께 여쭤봐서 확인해보니

    console.log(!user);
      console.log(password);
      console.log(user.password);
      console.log(!user || password);

!user 부분이 false가 나오고 있었습니다.

 

npm bcrypt에 들어가서 checkpassward를 참고하여 변형하니
false가 true로 만들었습니다.

      // 1. 비동기를 콜백함수를 통해 처리하는 방법
      const checkPasswor1 = bcrypt.compare(password, user.password, function (err, result) {
        // return result;
        console.log(result);
      });

      // 2. 비동기를 async await으로 처리하는 방법
      const checkPassword = await bcrypt.compare(password, user.password);
      // await를 통해서 bcrypt.compare가 10초가 걸린다 하면 10초를 기다린 후에 다음 로직을 실행한다
      console.log(checkPassword);

      // qwer1234 !== $2b$10$hqMo9JJqtYYv9qL/fWGo9OhuCS0mJPJdebW4HyU9JNjWqcnHRNMoC
      if (!user || checkPassword) {
        return { code: 412, data: '이메일 또는 패스워드를 확인해주세요.' };
      }

 

[알게된 점]

디버깅하는 방식을 좀 더 공부하고, 공식문서를 많이 찾아보아야 할 것 같습니다.