Smart貓小萌
2023-03-18 16:25:10
注意:這是我第一次發(fā)帖,如果您有任何意見,請(qǐng)告訴我目標(biāo):我正在構(gòu)建一些端點(diǎn),讓用戶在忘記密碼時(shí)重設(shè)密碼。流程看起來(lái)像這樣:用戶不知道密碼,所以他們點(diǎn)擊忘記密碼。用戶輸入電子郵件并點(diǎn)擊發(fā)送用戶收到帶有重置密碼鏈接的電子郵件。單擊鏈接并被重定向以輸入他們的新密碼。他們點(diǎn)擊“保存”,他們被重定向到登錄以使用他們的新密碼登錄我正在使用 Insomnia 來(lái)達(dá)到測(cè)試的終點(diǎn)。正在工作的事情:當(dāng)提供電子郵件以重置密碼時(shí),Nodemailer 會(huì)發(fā)送一封電子郵件。更新密碼時(shí),它會(huì)顯示“密碼已更新”并給出 200 狀態(tài)。錯(cuò)誤:嘗試使用該新密碼登錄后,它不會(huì)保存到數(shù)據(jù)庫(kù)中。只有舊密碼才能讓您重新登錄。我嘗試過的事情:我嘗試更改我的 user.model 以使用我的 findByEmail 函數(shù)并遇到了一些奇怪的錯(cuò)誤,這讓我陷入了困境。我嘗試了控制臺(tái)日志記錄很多事情,看看我是否可以追蹤路徑。我嘗試更改 user.update 函數(shù),但無(wú)法使其正常工作。這是我的代碼: 任何指導(dǎo)將不勝感激。如果您需要查看任何其他文件,請(qǐng)告訴我。忘記密碼.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貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個(gè)贊
你的User.update()線路沒有運(yùn)行(你要么需要將他們的承諾返回到承諾鏈中,要么掛鉤到他們的回調(diào)中)。async/await是你的朋友在這里避免“回調(diào)地獄”。
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,
})
添加回答
舉報(bào)
0/150
提交
取消