亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 NodeJs/Knex/Nodemailer 的忘記密碼功能無法正常工作

使用 NodeJs/Knex/Nodemailer 的忘記密碼功能無法正常工作

Smart貓小萌 2023-03-18 16:25:10
注意:這是我第一次發帖,如果您有任何意見,請告訴我目標:我正在構建一些端點,讓用戶在忘記密碼時重設密碼。流程看起來像這樣:用戶不知道密碼,所以他們點擊忘記密碼。用戶輸入電子郵件并點擊發送用戶收到帶有重置密碼鏈接的電子郵件。單擊鏈接并被重定向以輸入他們的新密碼。他們點擊“保存”,他們被重定向到登錄以使用他們的新密碼登錄我正在使用 Insomnia 來達到測試的終點。正在工作的事情:當提供電子郵件以重置密碼時,Nodemailer 會發送一封電子郵件。更新密碼時,它會顯示“密碼已更新”并給出 200 狀態。錯誤:嘗試使用該新密碼登錄后,它不會保存到數據庫中。只有舊密碼才能讓您重新登錄。我嘗試過的事情:我嘗試更改我的 user.model 以使用我的 findByEmail 函數并遇到了一些奇怪的錯誤,這讓我陷入了困境。我嘗試了控制臺日志記錄很多事情,看看我是否可以追蹤路徑。我嘗試更改 user.update 函數,但無法使其正常工作。這是我的代碼: 任何指導將不勝感激。如果您需要查看任何其他文件,請告訴我。忘記密碼.jsconst router = require('express').Router();const crypto = require('crypto')const User = require('../models/users.model')const nodemailer = require('nodemailer')router.post('/forgotpassword', (req, res) => {  let {    email  } = req.body  console.log(req.body)  // if (req.body.email === '') {  //   res.status(400).json({ message: 'Email is required'})  // } console.error(req.body.email)  User.findBy({      email    })    .first()    .then(user => {      if (user === null) {        res.status(403).json({          message: 'Email not in db'        })      } else {        const token = crypto.randomBytes(20).toString('hex')        User.update({          resetPasswordToken: token,          resetPasswordExpires: Date.now() + 3600000,        })         const transporter = nodemailer.createTransport({          service: 'gmail',          auth: {            user: `${process.env.EMAIL_USER}`,            pass: `${process.env.EMAIL_PASS}`          }        })
查看完整描述

1 回答

?
浮云間

TA貢獻1829條經驗 獲得超4個贊

你的User.update()線路沒有運行(你要么需要將他們的承諾返回到承諾鏈中,要么掛鉤到他們的回調中)。async/await是你的朋友在這里避免“回調地獄”。


const user = await User.find({

  where: {

    username: req.body.username,

    resetPasswordToken: req.body.resetPasswordToken,

    resetPasswordExpires: Date.now() + 3600000,

  }

})

if (!user) { /* ... */ }

const token = crypto.randomBytes(20).toString('hex')

await User.update({ // await here!

  resetPasswordToken: token,

  resetPasswordExpires: Date.now() + 3600000,

})


查看完整回答
反對 回復 2023-03-18
  • 1 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號