2012-10-10 135 views
0

我試圖創建自定義保存方法,以便不將用戶密碼存儲爲純文本。但似乎無論我做什麼來改變this.values的價值都沒有任何影響。這是我的sequelize型號:無法更改此屬性

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 
    }} 
    } 
);}; 

第一個日誌聲明證實,裏面的代碼,如果isNewRecord運行,並生成一個散列,第二個日誌語句和輸出表明,這種特性保持不變,從他們的原始值。有誰知道這是爲什麼,或者我該如何解決這個問題?

我可以在發佈請求後立即做到這一點,但我寧願這樣做,如果可能的話。

+0

檢查'this.values'附近第一個日誌 – XMen

+0

@XMen一樣,一個在其下方。 – DNN

+1

嘗試設置'this.password'而不是'this.values.password' – XMen

回答

1

的事情是,this.values實際上只有返回所有與其相應的值屬性的吸氣劑。添加一個setter可能是一個好主意。但是,如果setter應該更新數據庫,那麼就存在這個問題。所以基本上this.values應該只用於像console.log這樣的東西。此外它在內部用於instance.toJSON()

而作爲X戰警已經回答正確,你必須使用this.password代替this.values.password :)