为了账号安全,请及时绑定邮箱和手机立即绑定

使用 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 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号