iT邦幫忙

2022 iThome 鐵人賽

DAY 20
0
Modern Web

用 Node.js 打造後端 API系列 第 20

Day 20 - 使用者更新資料

  • 分享至 

  • xImage
  •  

前言


處理完比較複雜的忘記&重設密碼後,我們要來讓使用者更新自己的資料
Day 13建立的UserSchema
只有定義name, email, role, password這四個type
除了role之外, 使用者能更新name, email, password
因為不同的role擁有不同的權限,像是建立bootcamp或course的數量不同
這部分比較複雜,有機會再設定?

更新name, email


打開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
  });
});

更新password


一樣在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);
});

上一篇
Day 19 - 忘記密碼3
下一篇
Day 21 - 建立Review Model
系列文
用 Node.js 打造後端 API30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言