getting password hashing into a hook where it could be async
Signed-off-by: Claudius <opensource@amenthes.de>
This commit is contained in:
parent
4b579be93e
commit
df666dd214
1 changed files with 14 additions and 6 deletions
|
@ -5,7 +5,7 @@ var scrypt = require('@mlink/scrypt')
|
||||||
|
|
||||||
// core
|
// core
|
||||||
var logger = require('../logger')
|
var logger = require('../logger')
|
||||||
var {generateAvatarURL} = require('../letter-avatars')
|
var { generateAvatarURL } = require('../letter-avatars')
|
||||||
|
|
||||||
module.exports = function (sequelize, DataTypes) {
|
module.exports = function (sequelize, DataTypes) {
|
||||||
var User = sequelize.define('User', {
|
var User = sequelize.define('User', {
|
||||||
|
@ -41,11 +41,7 @@ module.exports = function (sequelize, DataTypes) {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
password: {
|
password: {
|
||||||
type: Sequelize.TEXT,
|
type: Sequelize.TEXT
|
||||||
set: function (value) {
|
|
||||||
var hash = scrypt.kdfSync(value, scrypt.paramsSync(0.1)).toString('hex')
|
|
||||||
this.setDataValue('password', hash)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
instanceMethods: {
|
instanceMethods: {
|
||||||
|
@ -153,5 +149,17 @@ module.exports = function (sequelize, DataTypes) {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
function updatePasswordHashHook (user, options, done) {
|
||||||
|
// suggested way to hash passwords to be able to do this asynchronously:
|
||||||
|
// @see https://github.com/sequelize/sequelize/issues/1821#issuecomment-44265819
|
||||||
|
if (!user.changed('password')) { return done() }
|
||||||
|
const hash = scrypt.kdfSync(user.get('password'), scrypt.paramsSync(0.1)).toString('hex')
|
||||||
|
user.setDataValue('password', hash)
|
||||||
|
done()
|
||||||
|
}
|
||||||
|
|
||||||
|
User.beforeCreate(updatePasswordHashHook)
|
||||||
|
User.beforeUpdate(updatePasswordHashHook)
|
||||||
|
|
||||||
return User
|
return User
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue