處理完比較複雜的忘記&重設密碼後,我們要來讓使用者更新自己的資料
在Day 13建立的UserSchema
只有定義name, email, role, password這四個type
除了role之外, 使用者能更新name, email, password
因為不同的role擁有不同的權限,像是建立bootcamp或course的數量不同
這部分比較複雜,有機會再設定?
打開auth controller
在這裡須限制user只能輸入name&email
不能讓他們輸入role或password,避免更動到機密資料
exports.updateDetails = asyncHandler(async (req, res, next) => {
const fieldsToUpdate = {
name: req.body.name,
email: req.body.email
}
const user = await User.findByIdAndUpdate(req.user.id, fieldsToUpdate, {
new: true,
runValidators: true
});
res.status(200).json({
success: true,
data: user
});
});
一樣在auth controller中
user必須先登入
我們要透過matchPassword method
將user輸入的currentPassword與this.password (user)比較
確認兩者相同,才能將輸入的newPassword設為user的新密碼
最後再return token
exports.updatePassword = asyncHandler(async (req, res, next) => {
const user = await User.findById(req.user.id).select('+password');
if (!(await user.matchPassword(req.body.currentPassword))) {
return next(new ErrorResponse(`Password is incorrect`, 401));
}
user.password = req.body.newPassword;
await user.save();
sendTokenResponse(user, 200, res);
});