---
# System prepended metadata

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

---

# 🏅 Day 31 - 實作重設密碼

運用前幾天提到的 validator、bcrypt.js、JWT 嘗試實作重設密碼功能

題目
---
實作重設密碼 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


## 回報流程

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

![](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;

  // 簡單驗證新密碼與再次輸入一致（可再自行加上 validator 驗證）
  if (password !== confirmPassword) {
    return next(appError("400","密碼不一致！",next));
  }

  // 將新密碼加密
  newPassword = await bcrypt.hash(password,12);
  
  // 更新資料庫
  const user = await User.findByIdAndUpdate(req.user.id, {
    password: newPassword
  });

  // JWT
  generateSendJWT(user, 200, res);  

  //（將產生 JWT token 並回傳資訊包裝成一個函式 generateSendJWT）
  // https://github.com/gonsakon/express-week4-sample/blob/a64c7d7e50aad774cc15b344426297470613b0aa/service/auth.js#L35-L48
  
}))
```
-->




回報區
---
<!-- 
將答案貼至下方表格內，格式：
| Discord 暱稱 | [CodePen](連結) |
-->

|    Discord    |   CodePen ／ 答案  |
|:-------------:|:-----------------:|
| xxx | [CodePen]() |
| 苡安 | [hackmd](https://hackmd.io/@L7K9-66lSeagS28AP0_GjQ/rk_RiRf7A) |
| william威良 | [CodePen](https://codepen.io/snowman12320/pen/wvbKWvb?editors=1010) |
| jenny7532 | [CodePen](https://codepen.io/wei-chen-wu/pen/wvbKWBb) |
| Hank | [CodePen](https://codepen.io/tw1720/pen/pomowmx) |
| Tiya | [CodePen](https://codepen.io/Tiya_blank/pen/rNbQPbY) |
| Chia Pin | [CodePen](https://codepen.io/joker-cat/pen/abrvmro) |
| wei | [CodePen](https://codepen.io/Wei-the-sasster/pen/LYopxQB?editors=0010) |
| william_hsu | [CodePen](https://codepen.io/william8815/pen/GRapmWy) |
|Lobinda|[HackMD](https://hackmd.io/@Lobinda/rkMJTatmR)|
| runweiting |[CodePen](https://codepen.io/weiting14/pen/gOJrNYX)|
|Mei|[CodePen](https://codepen.io/l_umei/pen/rNgMoBV?editors=0010)|
| Fabio20 | [CodePen](https://codepen.io/fabio7621/pen/ZENBjMP) |
