0
我想在創建記錄和用戶更新其密碼時爲用戶哈希密碼。在創建時,我可以做類似關於創建和更新的哈希密碼
User.beforeCreate((user, options) => {
user.password = encryptPassword(user.password)
})
這將很容易執行並散列新用戶的密碼。但更新密碼時遇到問題。如果我只是做
User.beforeUpdate((user, options) => {
user.password = encryptPassword(user.password)
})
然後每次用戶更新他們的記錄(即更新名稱,地址等),它觸發鉤和重新散列密碼。
如何知道密碼何時更改以便觸發掛鉤?而不是有這兩個鉤子,我怎麼才能使用beforeSave
來實現相同的結果?
UPDATE
按要求我的用戶的定義很簡單,只要
sequelize.define(
'user',
{
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true,
},
emailAddress: {
field: 'email_address',
type: Sequelize.STRING,
allowNull: false,
unique: true,
validate: {
isEmail: {
args: true,
msg: "Email is not valid"
}
},
},
password: {
type: Sequelize.STRING,
allowNull: false,
validate: {
min: {
args: 6,
msg: "Password must be more than 6 characters"
}
}
}
}
)
嘿,看起來沒問題。用'.changed()'我可以知道密碼何時更改。但另一個問題是鉤子不會觸發驗證。所以如果我的驗證說最小密碼是6個字符,我仍然可以傳遞3位密碼。 – spondbob
您是否檢查過https://sequelize.readthedocs.io/en/v3/docs/hooks/?這意味着驗證鉤將在這兩個鉤子之前運行。如果您發佈您正在處理的用戶表的Sequelize定義,我可能會向您提供一些見解。 –
我明白了鉤子順序,它與v4仍然相關,我正在使用http://docs.sequelizejs.com/manual/tutorial/hooks.html#order-of-operations。但我仍然不明白爲什麼當觸發update/create hook時不應用驗證。我添加了我的用戶定義。 – spondbob