[英]Can't change property of this
我试图创建一个自定义保存方法,以便不将用户密码存储为纯文本。 但似乎无论我做什么来改变this.values的值都没有任何影响。 这是我的续集模型:
module.exports= function (sequelize, DataTypes){
return sequelize.define("Users",{
username: DataTypes.STRING,
password: DataTypes.STRING,
first_name: DataTypes.STRING,
last_name: DataTypes.STRING,
email: DataTypes.STRING,
is_admin: DataTypes.BOOLEAN,
active: DataTypes.BOOLEAN
},{ instanceMethods: {
user_save: function(){
if(this.isNewRecord){
var salt = 'blahblahblah';
var key128Bits = CyrptoJS.PBKDF2(this.values.password, salt, { keySize: 128/32 });
delete this.values.password;
this.values.password = key128Bits.toString()
console.log('new record ' + key128Bits.toString())
}
console.log(this.values)
this.save();
return
}}
}
);};
第一个日志语句确认if isNewRecord中的代码正在运行,并生成散列,第二个日志语句和输出表明其属性与原始值保持不变。 有谁知道为什么这是或如何解决问题?
我可以在发布请求后立即执行此操作但我宁愿这样做,如果可能的话。
http://sequelizejs.com/#instances-update-save
设置this.password
而不是this.values.password
问题是this.values
实际上只是一个getter,它返回所有属性及其各自的值。 添加一个setter可能是个好主意。 但是问题是,setter是否应该更新数据库。 所以基本上this.values
应该只用于console.log
东西。 它也在内部用于instance.toJSON()
。
并且由于XMen已经正确回答,你必须使用this.password
而不是this.values.password
:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.