レコードの作成時およびユーザーのパスワードの更新時にユーザーのパスワードをハッシュしようとしています。作成時には、作成時および更新時のハッシュパスワード
User.beforeCreate((user, options) => {
user.password = encryptPassword(user.password)
})
のようにすることができます。これは、簡単に実行され、新しいユーザーのパスワードをハッシュします。しかし、私はパスワードを更新する際に問題があります。私がしたばかりの場合、ユーザーはレコード(更新名、住所など)を更新するたびに、フックをトリガーしてパスワードを再ハッシュします。
フックをトリガーできるようにパスワードが変更されたときをどうすればわかりますか?また、それらの2つのフックを持つ代わりに、私はちょうど同じ結果を達成するために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/を確認しましたか?これは、検証フックがこれら2つのフックの前に実行されることを意味します。私が作業しているユーザーテーブルのSequelize定義を投稿すると、いくつかの洞察を得ることができます。 –
私はフックの順序について理解していますが、まだv4と関連があります。http://docs.sequelizejs.com/manual/tutorial/hooks.html#order-of-operationsを使用しています。しかし、私はまだ更新/作成フックがトリガされたときに検証が適用されない理由を理解していません。私は自分のユーザー定義を追加しました。 – spondbob