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内のコードが実行されていることを確認し、ハッシュを生成します。2番目のログステートメントと出力は、このプロパティが元の値から変更されていないことを示します。なぜこれなのか、どうすれば問題を解決できるのか誰かが知っていますか?

POSTリクエストの直後にこれを行うこともできますが、可能であればこの方法で行うことをお勧めします。

4

2 に答える 2

1

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

this.password代わりに設定this.values.password

于 2012-10-11T04:19:36.637 に答える
1

this.values実際には、すべての属性とそれぞれの値を返すゲッターだけです。セッターも追加することをお勧めします。しかし、セッターがデータベースを更新する必要があるかどうかという問題があります。したがって、基本的にthis.valuesはのようなものにのみ使用する必要がありますconsole.log。また、内部的に使用されinstance.toJSON()ます。

そして、XMenはすでに正しく答えているので、 :)this.passwordの代わりに使用する必要がありますthis.values.password

于 2012-10-11T05:57:06.010 に答える