无法在 Cloud Code 中保存对象
Can't save object in Cloud Code
我在 运行 Cloud Code 中的函数时遇到问题。它应该检查对象是否存在,如果确实存在,则创建一个新用户:
Parse.Cloud.define("createUser", function(request, response) {
// Query the existing company by id
var query = new Parse.Query(Parse.Object.extend("Company"));
query.equalTo("objectId", request.params.company.existing.id);
query.find().then(function(result){
var user = new Parse.User();
user.set("username", request.params.username);
user.set("password", request.params.username);
user.set("email", request.params.email);
user.set("permissions", ["User"]);
var company = result[0];
user.signUp(null, {
success: function(user){
// Asign company ACL for User write permission
var cACL = company.getACL();
cACL.setWriteAccess(user.id, true);
company.setACL(cACL);
// Save company
company.save();
console.log(company);
// Establish user-company relationship
var cRelation = user.relation("associated");
cRelation.add(company);
// Save user
user.save();
console.log(user);
// Finish
response.success(user);
},
error: function(user, error){
response.error(JSON.stringify({code: -8000, message: "User creation failed"}));
}
});
}, function(error){
response.error(JSON.stringify({code: -8001, message: "Invalid company"}));
});
});
我首先查询 Parse 是否存在所述对象。如果它确实存在,我将使用收到的参数创建一个新用户。在用户创建的完成块中,我分配了正确的 ACLs(给 company 对象)并稍后保存它们。那是我遇到第一个问题的时候:ACL 未保存(在仪表板中检查)。我 console.log
公司出于调试目的,它显示 ACLs 已正确设置。所以我认为这一定是一个储蓄问题。
注意: 用户已创建,但我稍后尝试执行的操作均无效。
后来我将此对象添加到以前在仪表板中定义的关系中,但我遇到了同样的问题:关系 没有出现在仪表板 中,即使我 console.log
表示关系设置正确的对象。
我在这里迷路了。我不明白为什么这不起作用,我已经阅读了大量的在线文档,但仍然找不到答案。
好的,经过一天的工作,我终于找到了我的问题。我到处都设置了 ACL,但我没有保存我试图保存的对象的权限。 所以保存确实失败了。
请注意,如果您遇到与我相同的问题,您可以使用 Master Key 轻松解决。为此,您需要在执行任何必须经过身份验证的请求之前调用 Parse.Cloud.useMasterKey()
。
这仅在 Cloud Code 中有效将读写权限 授予任何地方的任何人 。因此,请确保您的逻辑完美无缺,因为如果使用不当,您可能会遇到严重的安全问题。正如本大叔所说:能力越大,责任越大。
希望这对某人有所帮助。
我在 运行 Cloud Code 中的函数时遇到问题。它应该检查对象是否存在,如果确实存在,则创建一个新用户:
Parse.Cloud.define("createUser", function(request, response) {
// Query the existing company by id
var query = new Parse.Query(Parse.Object.extend("Company"));
query.equalTo("objectId", request.params.company.existing.id);
query.find().then(function(result){
var user = new Parse.User();
user.set("username", request.params.username);
user.set("password", request.params.username);
user.set("email", request.params.email);
user.set("permissions", ["User"]);
var company = result[0];
user.signUp(null, {
success: function(user){
// Asign company ACL for User write permission
var cACL = company.getACL();
cACL.setWriteAccess(user.id, true);
company.setACL(cACL);
// Save company
company.save();
console.log(company);
// Establish user-company relationship
var cRelation = user.relation("associated");
cRelation.add(company);
// Save user
user.save();
console.log(user);
// Finish
response.success(user);
},
error: function(user, error){
response.error(JSON.stringify({code: -8000, message: "User creation failed"}));
}
});
}, function(error){
response.error(JSON.stringify({code: -8001, message: "Invalid company"}));
});
});
我首先查询 Parse 是否存在所述对象。如果它确实存在,我将使用收到的参数创建一个新用户。在用户创建的完成块中,我分配了正确的 ACLs(给 company 对象)并稍后保存它们。那是我遇到第一个问题的时候:ACL 未保存(在仪表板中检查)。我 console.log
公司出于调试目的,它显示 ACLs 已正确设置。所以我认为这一定是一个储蓄问题。
注意: 用户已创建,但我稍后尝试执行的操作均无效。
后来我将此对象添加到以前在仪表板中定义的关系中,但我遇到了同样的问题:关系 没有出现在仪表板 中,即使我 console.log
表示关系设置正确的对象。
我在这里迷路了。我不明白为什么这不起作用,我已经阅读了大量的在线文档,但仍然找不到答案。
好的,经过一天的工作,我终于找到了我的问题。我到处都设置了 ACL,但我没有保存我试图保存的对象的权限。 所以保存确实失败了。
请注意,如果您遇到与我相同的问题,您可以使用 Master Key 轻松解决。为此,您需要在执行任何必须经过身份验证的请求之前调用 Parse.Cloud.useMasterKey()
。
这仅在 Cloud Code 中有效将读写权限 授予任何地方的任何人 。因此,请确保您的逻辑完美无缺,因为如果使用不当,您可能会遇到严重的安全问题。正如本大叔所说:能力越大,责任越大。
希望这对某人有所帮助。