2016-01-21 5 views
2

У меня возникла проблема при запуске функции в 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"})); 
    }); 

}); 

Я первый запрос Анализировать для существования указанного объекта. Если он существует, я создаю нового пользователя с полученными параметрами. В блоке завершения создания пользователя я назначаю соответствующие ACL ( компании), а затем сохранить их. Вот когда я столкнулся с первой проблемой: ACL не сохранены (отмечен на приборной панели). I console.log компания для целей отладки и показывает, что ACL установлены правильно. Поэтому я предполагаю, что это должна быть проблема с сохранением .

ПРИМЕЧАНИЕ: Пользователь создан, но все, что я пытаюсь сделать позже, не работает.

Позже я добавить этот объект отношений, ранее определенной в приборной панели, но у меня такая же проблема с этим: отношения не приходит в приборную панель, несмотря на то, когда я console.log объект он показывает что отношения были правильно установлены.

Я потерялся здесь. Я не понимаю, почему это не работает, и я прочитал тонны онлайн-документации и до сих пор не могу найти ответ.

ответ

2

Хорошо, после рабочего дня я наконец выяснил свою проблему. У меня было ACLs установлено везде, и у меня не было никаких прав на сохранение объектов, которые я пытался сохранить. Так что экономия действительно не удалась.

Следует отметить, что если у вас такая же проблема, я сделал это, вы можете легко решить ее, используя главный ключ . Для этого вам необходимо позвонить Parse.Cloud.useMasterKey() перед выполнением любых запросов, которые должны быть аутентифицированы.

Это работает только в Облако кодекса, и вы обязательно должны знать, что вы делаете, когда вы используете Master Key, потому что это в основном дает читать и писать привилегии любому, везде, все. Поэтому убедитесь, что ваша логика безупречна, потому что вы можете столкнуться с большими проблемами безопасности, если она не используется разумно. Как Дядя Бен сказал: С большой мощностью приходит большая ответственность.

Надеюсь, это поможет кому-то.

+0

Для тех, кто читает это в 2017 году, я хотел бы упомянуть, что 'Parse.Cloud.useMasterKey()' прекращено, и вы должны передать '{useMasterKey: true}' в качестве опции для любой функции, которую вы хотите запустить приподнят. –

Смежные вопросы