无法在Cloud Code中保存对象

时间:2016-01-21 18:11:31

标签: parse-platform 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 是否存在所述对象。如果确实存在,我使用收到的参数创建一个新用户。在用户创建的完成块中,我分配了正确的 ACL (到公司对象),然后保存它们。当我遇到第一个问题时: ACL 未保存(在仪表板中检查)。我console.log公司用于调试目的,它显示 ACL 已正确设置。所以我认为它必须是保存问题

注意:用户已创建,但我稍后尝试执行的操作无效。

稍后我将此对象添加到之前在仪表板中定义的关系,但我遇到了同样的问题:关系没有出现在仪表板中,即使我console.log时也是如此对象显示关系已正确设置。

我迷失在这里。我不明白为什么这不起作用,我已经阅读了大量的在线文档,仍然无法找到答案。

1 个答案:

答案 0 :(得分:2)

好的,经过一天的工作,我终于发现了我的问题。我在任何地方设置了 ACL ,我没有权限保存我试图保存的对象。 所以节省确实失败了

我应该注意,如果您遇到同样的问题,可以使用主密钥轻松解决。为此,您需要在执行必须进行身份验证的任何请求之前调用Parse.Cloud.useMasterKey()

这仅适用于 Cloud Code ,当您使用 Master Key 时,您肯定知道自己在做什么,因为它基本上提供了读写权限对任何人,无处不在,为了一切。因此,请确保您的逻辑完美无瑕,因为如果不明智地使用它可能会遇到很大的安全问题。正如 Uncle Ben 所说:强大的力量带来了巨大的责任

希望这有助于某人。