注意:这是我第一次发帖,如果您有任何意见,请告诉我目标:我正在构建一些端点,让用户在忘记密码时重设密码。流程看起来像这样:用户不知道密码,所以他们点击忘记密码。用户输入电子邮件并点击发送用户收到带有重置密码链接的电子邮件。单击链接并被重定向以输入他们的新密码。他们点击“保存”,他们被重定向到登录以使用他们的新密码登录我正在使用 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,
})
添加回答
举报
0/150
提交
取消