从序列化模型中删除密码



我正在学习Sequelize,我在课程中看到了一些奇怪的东西,

const { Strategy } = require('passport-local');
const boom = require('@hapi/boom');
const bcrypt = require('bcrypt');
const UserService = require('./../../../services/user.service');
const service = new UserService();
const LocalStrategy = new Strategy({
usernameField: 'email',
passwordField: 'password'
},
async (email, password, done) => {
try {
const user = await service.findByEmail(email);
if (!user) {
done(boom.unauthorized(), false);
}
const isMatch = await bcrypt.compare(password, user.password);
if (!isMatch) {
done(boom.unauthorized(), false);
}
delete user.dataValues.password;
done(null, user);
} catch (error) {
done(error, false);
}
}
);
module.exports = LocalStrategy;

我的问题是,当我想比较密码时,我使用

bcrypt.compare(密码,user.password(;

并且当我想要删除密码时,我使用

删除用户dataValues.password

dataValues在哪里​​来自,顺便说一句,我正在使用sequelize

我不建议删除Sequelize模型中的服务道具(dataValues道具包含某个模型的所有字段的元数据(,因为这会导致该模型的工作不正确。您不需要从dataValues中删除password字段,而是需要从表示某个模型实例的普通对象中删除它:

const { password, ...plainUser } = user.get({ plain: true })
done(null, plainUser);

相关内容

  • 没有找到相关文章

最新更新