Sails.js Sails js不应返回密码和电子邮件

Sails.js Sails js不应返回密码和电子邮件,sails.js,Sails.js,我正在尝试在sails js中创建CRUD应用程序,并且我能够将数据发布到我的DB中。我注意到,当我在success sails return整个对象上插入数据时。但是,如果我们不希望某些字段作为响应,那么我们如何限制它呢。请帮忙,谢谢 module.exports = { attributes : { username : { type: 'string', required: true }, password : { t

我正在尝试在sails js中创建CRUD应用程序,并且我能够将数据发布到我的DB中。我注意到,当我在success sails return整个对象上插入数据时。但是,如果我们不希望某些字段作为响应,那么我们如何限制它呢。请帮忙,谢谢

module.exports = {
attributes : {
    username : {
        type: 'string',
        required: true
    },
    password : {
        type: 'string',
        required: true
    },
    email : {
        type: 'string',
        required: true,
        unique: true
    }
},
toJson: function() {
    var obj = this.toObject();
    delete obj.password;
    return obj;
},

beforeCreate: function(attribute, callback) {
    console.log(attribute.password);
    require('bcrypt').hash(attribute.password, 10, function(err, encryptedPassword) {   
        sails.log(err);
        attribute.password = encryptedPassword;
        sails.log(encryptedPassword);
        callback();
    });
}
  };

我认为通过sails默认restapi for models得到的响应在返回之前会通过
.toJSON
运行,所以您这样做是正确的

但是,您可能会遇到大小写问题,比如您应该使用大写字母定义
.toJSON
,而不是
.toJSON
。试着切换一下,看看它是否能解决你的问题


更新

听起来这并不能解决你的问题。来自中国的帆船说:

toJSON的真正威力取决于这样一个事实:通过res.json发送的每个模型实例都首先通过toJSON传递。您不必为使用特定模型(包括“开箱即用”蓝图)的每个控制器操作编写自定义代码,只需重写模型中的默认toJSON函数即可操作传出记录。您可以使用它来防止私人数据(如电子邮件地址和密码)被发送回每个客户端

这听起来非常明确地像我们正在尝试做的,所以这可能是一个sails bug。它可能适用于
find
,但不适用于
create
。在查找现有用户时是否返回该密码

如果必须,解决此问题的可靠方法是覆盖UserController中的默认创建操作:

create: function(req, res) {
    User.create(req.body).exec(function(err, user) {
        if (err) {
            return res.json(err);
        }
        // explicitly call your own toJSON() to be sure
        return res.send(user.toJSON());
    });
},

这并不理想,尤其是当您有许多模型属性要隐藏在许多api调用中时。但是它会完成这项工作。

我认为通过sails默认的restapi for models的响应在返回之前会通过
.toJSON
运行,所以您的做法是正确的

但是,您可能会遇到大小写问题,比如您应该使用大写字母定义
.toJSON
,而不是
.toJSON
。试着切换一下,看看它是否能解决你的问题


更新

听起来这并不能解决你的问题。来自中国的帆船说:

toJSON的真正威力取决于这样一个事实:通过res.json发送的每个模型实例都首先通过toJSON传递。您不必为使用特定模型(包括“开箱即用”蓝图)的每个控制器操作编写自定义代码,只需重写模型中的默认toJSON函数即可操作传出记录。您可以使用它来防止私人数据(如电子邮件地址和密码)被发送回每个客户端

这听起来非常明确地像我们正在尝试做的,所以这可能是一个sails bug。它可能适用于
find
,但不适用于
create
。在查找现有用户时是否返回该密码

如果必须,解决此问题的可靠方法是覆盖UserController中的默认创建操作:

create: function(req, res) {
    User.create(req.body).exec(function(err, user) {
        if (err) {
            return res.json(err);
        }
        // explicitly call your own toJSON() to be sure
        return res.send(user.toJSON());
    });
},

这并不理想,尤其是当您有许多模型属性要隐藏在许多api调用中时。但是它会完成任务。

@arbuthnott在上面部分是正确的——您确实需要
toJSON
而不是
toJSON
——但更重要的是,函数需要进入
属性
字典中,因为它是一个实例方法:

attributes : {
    username : {
        type: 'string',
        required: true
    },
    password : {
        type: 'string',
        required: true
    },
    email : {
        type: 'string',
        required: true,
        unique: true
    },
    toJSON: function() {
        var obj = this.toObject();
        delete obj.password;
        return obj;
    }
}

@上述arbuthnott部分是正确的——您确实需要
toJSON
而不是
toJSON
——但更重要的是,该函数需要进入
属性
字典中,因为它是一个实例方法:

attributes : {
    username : {
        type: 'string',
        required: true
    },
    password : {
        type: 'string',
        required: true
    },
    email : {
        type: 'string',
        required: true,
        unique: true
    },
    toJSON: function() {
        var obj = this.toObject();
        delete obj.password;
        return obj;
    }
}
你也可以这样做

你也可以这样做

密码:{type:'string',必需:true,受保护:true}

protected:true
现在在sails v1.0上不推荐使用

你可以用它来代替那个

密码:{type:'string',必需:true,受保护:true}

protected:true
现在在sails v1.0上不推荐使用

你可以用它来代替那个


Thanx用于回复arbuthnott,但将其改为大写也不起作用。发布了一个更新,值得一提。不知道为什么套管没能解决它。祝你好运。Thanx用于回复arbuthnott,但将其改为大写也不起作用。发布了一个更新,值得一提。不知道为什么套管没能解决它。祝你好运。它对我不起作用,我试图
parseInt
一个字段,它似乎从未运行过我的
customToJSON
你知道为什么吗?它对我不起作用,我试图
parseInt
一个字段,它似乎从未运行过我的
customToJSON
你知道为什么吗?