只有在满足某些条件时,我才需要加密密码。
beforeUpdate: function (value, cb) {
User.findOne(value.id)
.exec(function (err, originalUser) {
if (err || !originalUser) {
return cb();
}
//encrypt the password only if the password is not previously encrypted
if (value.password != originalUser.password) {
//encrypt the Pwd
} else {
cb();
}
});}问题是,值对象只包含更新参数,如何在值对象中获取整个用户对象?
发布于 2015-04-15 15:36:23
更新异步后,此方法不再起作用。
您不能在beforeUpdate中获取整个对象。您可以尝试执行此操作以获取id。var id= this.update.arguments[0]
发布于 2015-02-27 00:10:05
为了扩展user3036010的建议,我最终创建了一个新策略,如下所示:
在api/policies/propagateId.js中
module.exports = function(req, res, next) {
var id = req.param('id');
if (id && req.body) {
req.body.id = id;
}
next();
};然后将api/config/policies.js文件设置为默认情况下将策略应用于所有控制器和操作:
module.exports.policies = {
'*': 'propagateId'
};它的作用是强制在文档正文上设置id属性,这会使更新操作认为id是手动指定的。无论出于什么原因,在更新操作中都有一个代码块来检查这一点,如果没有手动指定id,它将从值中删除它。
这是一种滥用政策,但它似乎对我很好。如果你不想这样做,看起来就像每次你做一个update API请求时在你的请求体中手动指定id应该也可以。
发布于 2014-12-02 20:23:11
我不知道为什么在这里的值对象中需要这个,但是你可以创建一个自定义策略,它将获取整个user对象并发送'next()‘回调进行更新;
https://stackoverflow.com/questions/27248102
复制相似问题