我正在尝试通过解码作为 GET 请求中的参数给出的 JWT token 来验证用户电子邮件。
如果 token 有效且用户尚未验证,我想将 isVerified 列更新为 true。
为什么我的 Promise 总是被拒绝?
const jwt = require('jsonwebtoken');
const request = require('request');
const models = require('../models');
/**
* GET /verify-email/:token
*/
exports.verifyEmail = function(req, res) {
jwt.verify(req.params.token, process.env.TOKEN_SECRET, function(err, decoded) {
if (err) {
res.send({
msg: 'Token is invalid or has expired'
})
}
models.User.findOne({
where: {
email: decoded.email,
id: decoded.id
}
}).then(record => {
if (!record) {
res.send({
msg: 'User not found'
})
} else if (record.isVerified) {
res.send({
msg: 'User already verified'
})
} else {
console.log('user mail ' + record.email + ' will be verified in db')
record.update({
isVerified: true,
})
.then(() => res.status(200).send({
msg: 'User has been verified'
}))
.catch((error) => res.status(400).send(error));
}
})
});
}
最佳答案
问题解决了,我的模型中有一个 beforeValidation 钩子(Hook):
if (!user.changed('password')) {
return sequelize.Promise.reject("not modified");
}
关于javascript - 如何更新 Sequelize Promise 中的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47058555/