--- 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) |