我有一种情况,我正在使用PII混淆。例如,从服务获取信息时,SSN值将被混淆为'*********'
。现在我需要处理一种情况,即前端可能会更新其他信息并将混淆的SSN发送给我。在这种情况下,我想确保我不保存混淆版本。
我有一些工作代码,但我通常不喜欢依赖modelInstance.dataValues
所以我想知道是否有不同/更好/更惯用的方式来完成这项工作:
Member.beforeValidate((member, options) => {
const ssnRegex = /[0-9]{3}-?[0-9]{2}-?[0-9]{4}/gi;
// Before we validate model info, we want to remove any
// obfuscated values.
if (member.ssn && !ssnRegex.test(member.ssn)) {
delete member.dataValues.ssn;
}
});
我确实尝试delete member.ssn
,但是没有飞,我在文档中看不到modelInstance.remove()
(或类似的)方法。
答案 0 :(得分:0)
正如您所怀疑的那样,没有instance.remove
方法或等效方法,我同意操纵模型实例感觉不对。 Sequelize处理这种情况的方法是在更新期间传入一个fields
数组。这告诉Sequelize只更新数组中传递的字段:
const fields = ['name'];
if (!ssnIsObfuscated()) {
fields.push('ssn');
}
memberInstance
.update(req.body, {fields})
.then(() => {
// do something
});
作为预防措施,您还可以在validate
字段中添加ssn
方法。只有在创建或更新中包含ssn
时才会触发:
ssn: {
type: Sequelize.STRING,
validate: {
isObfuscated(value) {
if (ssnIsObfuscated()) {
throw new Error('No good');
}
}
}
}