0

我试图创建一个自定义保存方法,以免将用户密码存储为纯文本。但似乎我所做的任何改变 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 中的代码正在运行,并生成一个哈希,第二条日志语句和输出表明 this 的属性与其原始值保持不变。有谁知道这是为什么或我该如何解决这个问题?

我可以在发布请求后立即执行此操作,但如果可能的话,我宁愿这样做。

4

2 回答 2

1

http://sequelizejs.com/#instances-update-save

设置this.password而不是this.values.password

于 2012-10-11T04:19:36.637 回答
1

问题是它this.values实际上只是一个 getter,它返回所有属性及其各自的值。添加一个 setter 可能是个好主意。但是接下来有一个问题,setter 是否应该更新数据库。所以基本上this.values应该只用于像console.log. 此外,它在内部用于instance.toJSON().

由于 XMen 已经正确回答,您必须使用this.password而不是this.values.password:)

于 2012-10-11T05:57:06.010 回答