bcrypt의 compare메서드의 리턴값이 계속 false로 나오는데요, 어떻게 하면 true를 반환할까요
800
작성한 질문수 21
안녕하세요, 제로초님!
bcrypt의 compare 함수의 return 값이 계속 false가 나와서, 혹시 제시해주실 힌트가 있으실지 글을 남겨봅니다
이와 관련해 구글링에서 제시한 방법들을 적용해봤는데도, 계속적으로 false가 리턴됩니다ㅠ…
: 1. password 타입의 length를 늘리기(데이터가 짤려서 출력될 수 있다고 하여,,)
: 2. password 타입을 string 타입으로 변환? 후 디비에 저장하기
: 3. pre 미들웨어를 사용할 경우, pre()특성상 반복적?으로 pwd를 해싱하기 때문에 isModified()/ .isNew() 일 경우를 추가하기
: 4. compare()함수의 인자를 작성시, 인자의 순서 체크 - 첫번째인자는 유저가 입력한것, 두번째는 hashed되어 디비에 저장된 패스워드로 입력하기
위와 같이 해결방법을 찾았는데요,,,
1,2번은 이미 mongoose에서 해결해주는 부분이라 패스하고,,,
3,4번은 적용을 했는데도 ㅠ
comprare함수의 리턴값이 false로 나옵니다,,,
compare함수의 리턴값이 false여도...
false를 true라고;;; 조건식을 변경하면;;;;
입력한 값에 해당하는, json객체가 출력되어 문제는 없지만,,,,
(아래 authController.js파일, !passwordMatch를 passwordMatch로 변경하면 원하는 로직대로 나오지만 ㅠ )
(폼에 입력한 값에 해당한, json객체가 나와서 문제는 없는데..)
false를 true라고 가정하고;;
코드를 변경하면 원하는 결과를 얻게 되는데,,,
작성된 코드가 ,,,이건 아닌거 같아서요 ㅠ
왜 계속,,,false를 반환할까요,,;;
bcrypt말고 다른 라이브러리를 사용해야할까요??
감사합니다,
p.s)
추가 질문입니다.
1. issModified(‘password’) || isNew()
User.js 내용 중
UserSchema.pre('save', async function () {…} 부분에서,
isModified(‘password’) || isNew() 이하 블록이 실행되는 조건은,
password가 변경되거나 처음 입력될 경우 실행되는 건지요,
제가 잘 이해하고 코드를 작성했는지 궁금합니다
2. 에러 핸들링
bycript 공식홈페이지나 관련 코드를 구글링을 해보면, 코드를 콜백방식으로 작성한걸 심심치 않게 볼수 있는데요,
저는 async-await로 작성해서, 이걸어떻게 에러 핸들링 코드를 작성해야할까요?
try..catch로도 충분할까요?
--------------------------------------------------------------------------------------------------------------------------
User.js
import bcrypt from 'bcrypt';
import mongoose from 'mongoose';
const UserSchema = new mongoose.Schema(
{
…중략…
password: {
type: String,
required: true,
min: 6,
},
…중략…
},
{ timestamps: true }
);
UserSchema.pre('save', async function () {
try {
const salt = await bcrypt.genSalt(10);
if (this.isModified('password') || this.isNew()) {
this.password = await bcrypt.hash(this.password, salt);
}
} catch (err) {
console.log(err);
}
});
const User = mongoose.model('User', UserSchema);
export default User;
authController.js
export const login = async (req, res) => {
try {
const {
body: { email, password },
} = req;
const user = await User.findOne({ email: email });
if (!user) { // user가 ! 없는것이 맞다(true)면 = user가 없다면
return res.status(404).json({ error: 'user is not found' });
} else {
const passwordMatch = await bcrypt.compare(password, user.password);
//부정문을 먼저 시작하는 조건식
// passwordMatch가 false로 나와 계속 { error: 'Invalid Password' }를 출력
// !passwordMatch에서 !을 제거하면 원하는 결과 도출
if (!passwordMatch) { // match되는 password가 !없다는게 맞다(true)면 =
return res.status(400).json({ error: 'Invalid Password' });
}
return res.status(200).json(user);
}
} catch (err) {
return res.status(401).json(err);
}
};
답변 1
0
salt를 왜 넣으시는거죠? 누구 코드를 보고 하시고 계신건가요? 제 강좌 코드를 따라하세요. 저도 제 코드가 아닌 부분은 모릅니다.
async await 에러는 try catch로 해결하시면 됩니다.
리눅스 노드 설치시 패키지
0
172
0
socket.js 에서 referer로부터 roomId를 가져올 때
0
926
3
스트리밍 방식으로 대용량 파일 업로드 & 다운로드 관련 질문
0
2297
2
a[title] 질문드립니다
0
387
1
리뉴얼 강의 및 공부 방법
0
590
1
jwt decode
0
1138
1
node.js 교과서 3판 질문드립니다
0
397
1
passport와 jwt
0
438
1
리뉴얼 강의
0
428
2
혹시 Node.js 교과서 3판 이북은 언제 나오나요?
0
359
1
몽고디비 사용자도 MYSQL부분을 들어야 하나요???
0
490
1
sql 쿼리 로그는 어떤 모듈이 작성하나요?
0
511
2
nunjucks res.render('error'); 작동을 안합니다.
0
519
1
질문있습니다.
0
348
1
multer 한글 파일 업로드시 파일명이 깨져요.
1
3543
1
수업자료는 어디있나요?
0
374
1
질문 있습니디
0
245
1
multer 사용시 file 외 name값은 못받나용?
0
430
1
코드 중복 부분 질문드립니다.
0
303
1
api 만드는 이유 질문드립니다.
0
293
1
Strategy의 done에 대해 질문드립니다.
0
374
1
안녕하세요 fs 권한 관련 질문드립니다
0
456
1
시퀄라이즈 연결질문...
0
511
2
res.setHeader vs res.cookie
0
1797
3





