---
# System prepended metadata

title: "\U0001F3C5 Day 31 - 實作重設密碼"
tags: [Node.js 直播班 - 2023 春季班]

---

---
tags: Node.js 直播班 - 2023 春季班
---

# 🏅 Day 31 - 實作重設密碼

## 題目
實作重設密碼 API POST `/users/updatePassword`
流程大致上為：
接收 request body 的資料 
→ 驗證：密碼與確認密碼欄位值需為一致，可自行加上必填欄位、密碼需至少 8 碼以上，並包含英文與數字 ... 等等
→ 使用 [bcryptjs](https://www.npmjs.com/package/bcryptjs) 將密碼進行 hash
→ 更新至資料庫
→ [jsonwebtoken](https://github.com/auth0/node-jsonwebtoken) 產生 JWT 並回傳 user 資料及 token



## 回報流程

將答案連結貼至底下回報就算完成了喔! 
解答位置請參考下圖（需打開程式碼的部分觀看）

![](https://i.imgur.com/vftL5i0.png)

<!-- 解答：  

參考範例 https://github.com/gonsakon/express-week4-sample/blob/week6/routes/users.js#L61-L73

```javascript
router.post('/updatePassword',isAuth,handleErrorAsync(async(req,res,next)=>{
  
  const {password,confirmPassword } = req.body;
  if(password!== confirmPassword){
    return next(appError("400","密碼不一致！",next));
  }
  newPassword = await bcrypt.hash(password,12);
  
  const user = await User.findByIdAndUpdate(req.user.id,{
    password:newPassword
  });
  generateSendJWT(user,200,res)
}))
```

-->



回報區
---

| 報數 |       組別／Discord 名字       |                            Codepen／HackMD／其他回饋                            |
|:----:|:-----------------------:|:-------------------------------------------------------------------------:|
| 1 | 中 4 組 / jimkk159 | [HackMD - Day 31](https://hackmd.io/qButKXntR3W64KQ-30wG0Q) |
| 2 | 南 1 組 / hiYifang | [HackMD - Day 31](https://hackmd.io/@gPeowpvtQX2Om6AmD-s3xw/S1WEL_yPc) |

