3 글 보임 - 1 에서 3 까지 (총 3 중에서)
-
글쓴이글
-
2023년 3월 10일 22:45 #71813
정중식참가자유저가 패스워드를 변경하고 재로그인하면, 패스워드가 일치하지않다고나옵니다. 환경은 리액트, node.js ,express, mognoDB,mongoose구요 먼저 User스키마쪽에 작성한 코드중 일부입니다. 여기서 비밀번호를 암호화해주고 , compare해줍니다.
UserSchema.pre('save', async function (next) { const user = this; const hash = await bcrypt.hash(this.password, 10);
this.password = hash; next(); });
UserSchema.methods.isValidPassword = async function (password) { const user = this;
const compare = await bcrypt.compare(password, user.password);
return compare; };
module.exports = mongoose.model('user', UserSchema); 그리고 다음은 /edit/profile 라우터 코드입니다. 좀 길어요..ㅠㅠ
// 유저 정보 변경 router.post('/edit/profile', isLogin, async (req, res) => { const { nickname, password, avatar, nicknameMode, passwordMode } = req.body;
try { let newUser; const user = await User.findById(req.user);
// 닉네임만 바꾸면, if (nicknameMode && !passwordMode) { const exist = await User.find({ nickname: nickname });
if (exist && exist.length !== 0) { return res.status(404).json({ errors: { msg: '이미 존재하는 닉네임입니다.' }, }); }
newUser = await User.findByIdAndUpdate( user, { $set: { nickname: nickname ? nickname : user.nickname, avatar: avatar ? avatar : user.avatar, }, }, { new: true } ) .select('-password') .exec();
return res.json(newUser); }
// 패스워드만 바꾸면, if (passwordMode && !nicknameMode) { console.log(password); newUser = await User.findByIdAndUpdate( user, { $set: { nickname: nickname ? nickname : user.nickname, avatar: avatar ? avatar : user.avatar, password: password ? password : user.password, }, }, { new: true } ) .select('-password') .exec();
await user.save(); return res.json(newUser);
}
// 닉네임, 패스워드 둘다 바꾸게된다면, if (passwordMode && nicknameMode) { const exist = await User.find({ nickname: nickname });
if (exist && exist.length !== 0) { return res.status(404).json({ errors: { msg: '이미 존재하는 닉네임입니다.' }, }); }
newUser = await User.findByIdAndUpdate( user, { $set: { nickname: nickname ? nickname : user.nickname, avatar: avatar ? avatar : user.avatar, password: password, }, }, { new: true } ) .select('-password') .exec();
await user.save(); return res.json(newUser); }
// 아바타만 변경하게된다면, newUser = await User.findByIdAndUpdate( user, { $set: { avatar: avatar ? avatar : user.avatar, }, }, { new: true } ) .select('-password') .exec();
return res.json(newUser); } catch (error) { console.error(error.message);
res.status(500).send('Server Error'); } });
코드중에 await user.save();를 써준 이유는 User.js에 작성해놓은 비밀번호 암호화 코드를 작동시키기위해서 입니당.. 혹시 이중에 제가 실수한부분이있을까요?
2023년 3월 11일 00:01 #71814
정중식참가자// 패스워드만 바꾸면, if (passwordMode && !nicknameMode) { const hash = await bcrypt.hash(password, 10);
newUser = await User.findByIdAndUpdate( user, { $set: { nickname: nickname ? nickname : user.nickname, avatar: avatar ? avatar : user.avatar, password: hash, }, }, { new: true } ) .select('-password') .exec();
// await user.save();
return res.json(newUser); } await user.save(); 을 없애고 그냥 bcrypt써줘버렸어요.. 이러니까 잘되네요 제 머리로는 비밀번호 변경할때 await user.save(); 하면 당연히 bcrypt될거라고생각했는데 왜 안되는걸까요?
-
글쓴이글
3 글 보임 - 1 에서 3 까지 (총 3 중에서)
- 답변은 로그인 후 가능합니다.