JAVASCRIPT

Error : data must be a string or Buffer and hash must be string

seo dori 2023. 3. 28. 21:18

회원가입시 password를 bcrypt로 단방향 암호화를 한뒤 DB에 저장을 해주고 select 문을 사용해서

email로 조건을 주어 password를 꺼내려고 했다.

단순하게 SELECT문에서 password만 써주면 password만 뽑아내는 줄 알았지만 다른 users table에 들어 있는 값도 나오기 때문에 해당에러가 hash는 string 형식으로 다루라고 Error문이 나온다. <- object로 인식 되었기 때문에

           SELECT문은 배열형식으로 데이터가 나오는 것이다. 

 

문제 코드

  //userDao.js
const getUserByEmail = async (email) => {
  try {
    const password = await appDataSource.query(
      `SELECT 
      id,
      email,
      password
      FROM users
      WHERE users.email = ?`,
      [email]
    );
    return password;
   }
 ...
 }
   
 
 //userService.js
 const hashedPassword = await userDao.getUserByEmail(email);
 const match = await bcrypt.compare(password, hashedPassword );
 
 >>Error

그래서

 

//userDao.js
const [user] = await appDataSource.query(
      `SELECT 
      id,
      email,
      password
      FROM users
      WHERE users.email = ?`,
      [email]
    );
    
    
  //userService.js
  const user = await userDao.getUserByEmail(email);
  const match = await bcrypt.compare(password, user.password);

이러한 객체형식으로 다 받아서 key 값으로 password를 받아와서 받아온 값과 사용자가 입력한 p/w를 비교해서 true/false 값을 가져올

수 있습니다.