어떤 이슈인가요?
JWT refreshToken을 bcrypt로 해싱 후 compare 시 항상 true 반환되는 문제
어떤 내용인가요?
문제 요약
JWT refreshToken을 bcrypt로 해싱해 DB에 저장하고, 이후 로그인 시 bcrypt.compare(token, hashedToken) 방식으로 검증했으나, 모든 값에 대해 true를 반환하는 문제가 발생함.
원인
bcrypt는 내부적으로 최대 72바이트까지만 비교에 사용되기 때문에,
refreshToken이 이 길이를 초과하면 뒤가 잘리고 비교되면서 의도치 않게 항상 true가 반환되었음.
✅ 해결 방법
if (token !== this.refreshToken)
- refreshToken을 해싱하지 않고 평문 그대로 DB에 저장하도록 변경
- Prisma 스키마에서 해당 필드 타입을
@db.Text로 지정해 충분한 길이를 수용하도록 조정
model User {
...
refreshToken String? @db.Text
}
## 참고할만한 자료(선택)
- https://github.com/kelektiv/node.bcrypt.js/issues/935
-
어떤 이슈인가요?
어떤 내용인가요?
문제 요약
JWT refreshToken을 bcrypt로 해싱해 DB에 저장하고, 이후 로그인 시
bcrypt.compare(token, hashedToken)방식으로 검증했으나, 모든 값에 대해true를 반환하는 문제가 발생함.원인
bcrypt는 내부적으로 최대 72바이트까지만 비교에 사용되기 때문에,
refreshToken이 이 길이를 초과하면 뒤가 잘리고 비교되면서 의도치 않게 항상 true가 반환되었음.
✅ 해결 방법
@db.Text로 지정해 충분한 길이를 수용하도록 조정