对于一个项目,我需要有用户,我想在数据库中存储加密的密码。
所以我需要你的帮助,因为我在添加用户时需要加密密码,但是当我启动sails lift
时,我在终端时出错:
In model `user`:
The `toJSON` instance method is no longer supported.
Instead, please use the `customToJSON` model setting.
配置:
我正在使用Sails 1.0 Beta
和Bcrypt 1.0.2
。
Model User.js
/**
* User.js
*
* @description :: A model definition. Represents a database
table/collection/etc.
* @docs :: https://sailsjs.com/docs/concepts/models-and-
orm/models
*/
var bcrypt = require('bcrypt');
module.exports = {
attributes: {
firstname: {
type: 'string'
},
lastname: {
type: 'string'
},
password: {
type: 'string'
},
email: {
type: 'string',
unique: true
},
code: {
type: 'string',
unique: true
},
referring: {
type: 'string'
},
comment: {
type: 'text'
},
// Add reference to Profil
profil: {
model: 'profil'
},
toJSON: function() {
var obj = this.toObject();
delete obj.password;
return obj;
}
},
beforeCreate: function(user, cb) {
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(user.password, salt, function(err, hash) {
if (err) {
console.log(err);
cb(err);
} else {
user.password = hash;
cb();
}
});
});
}
};
我认为我使用旧的方法来加密密码,但我不知道或者找不到另一种方法来执行此操作。
提前致谢
答案 0 :(得分:2)
我认为您应该执行以下操作并记住将此customToJSON函数放在attributes:{...},
attributes:{...},
customToJSON: function() {
// Return a shallow copy of this record with the password and ssn removed.
return _.omit(this, ['password'])
}
答案 1 :(得分:0)
您看到的错误与加密无关。查看您的模型并记下toJSON函数。如错误消息所示,这是一个实例方法,不再支持它。所以按照建议操作:使用y2-y1
模型设置。我相信你会在文档中找到它。
答案 2 :(得分:0)
我知道这个问题已经过时了,但很多时候会有一些亮点。
从Sails 1.0开始,不再支持实例方法。文档建议您应该使用customToJSON
,但它不会说明您应该在属性之外使用它。
customToJSON允许您在发送数据之前使用自定义函数对数据进行字符串化。
在您的情况下,您将要省略密码。
使用customToJSON,您可以使用this
关键字来访问返回的对象。建议不要改变这个对象,intsead创建一个副本。
因此,对于您的示例,您将使用:
module.exports = {
attributes: {...},
customToJSON: function() {
return _.omit(this, ['password'])
},
beforeCreate: function(user, cb) {...}
};