본문 바로가기

JAVASCRIPT

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

회원가입시 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 값을 가져올

수 있습니다. 

'JAVASCRIPT' 카테고리의 다른 글

회원가입 및 포스팅 후기  (0) 2023.03.30
Bcrypt - 단방향 암호화  (0) 2023.03.29
구조분해할당-기초?예시  (0) 2023.03.27
app.get VS router.get  (0) 2023.03.26
RegExp(정규표현식)  (0) 2023.03.25