我试图限制云功能中解析用户对象的某些字段的可见性。 我有一个"产品" class,带有一个名为&#34的指针; owner"到用户"上传了该项目。
我还有一个名为" getProducts"的云功能,我使用query.include(" owner")同时获取所有者数据。
我想要实现的是," getProduct"的输出将是产品列表,但是"所有者"对象将仅包含某些字段,例如" firstName"或" facebookId", 我不想将其他敏感数据返回给客户端,即使我没有提供它(例如位置,电子邮件,姓氏等)。
搜索后,我看到了2种可能的解决方案。 1.)将User类切换为2个类,其中1个是" Private"只为用户使用ACL的类。 2.)我喜欢的第二种方法,我编辑云功能中的字段,但我似乎无法改变"所有者"对象"产品"宾语。我收到错误: "错误:未捕获尝试使用指向未保存的新对象的对象保存对象。 (代码:141,版本:1.2.19)"
var output[] = [];
_.each(results, function(result) {
var responseData = {};
var owner = result.get("owner");
//Remove fields from the user object
var itemOwnerId = owner.id;
var itemOwnerFirstName = owner.firstName;
var itemOwnerFacebookID = owner.facebookID;
var itemOwner = new Parse.User();
itemOwner.id = itemOwnerId;
itemOwner.id = itemOwnerId;
itemOwner.firstName = itemOwnerFirstName;
itemOwner.facebookID = itemOwnerFacebookID;
result.set("owner", itemOwner);
responseData.item = result;
output.push(responseData);
});
似乎调用result.set("所有者",itemOwner)并不好,并且告诉我exepction: rror:Uncaught尝试使用指向未保存的新对象的指针保存对象。 (代码:141,版本:1.2.19)
我做错了什么?
答案 0 :(得分:13)
SDK不允许将已更改的对象序列化为响应。
解决这个问题的黑客方法是:
result.dirty = function() { return false; };
这将禁用检查并允许您返回修改后的对象。
如果您想稍后重新启用它,则需要存储result.dirty的原始值并稍后重新分配。