Javascript 解析JS添加具有角色的用户

Javascript 解析JS添加具有角色的用户,javascript,parse-platform,Javascript,Parse Platform,我正在尝试基本上有一个注册表单,它将注册一个用户,并添加刚刚注册到certan角色的用户。我让应用程序注册了用户,但它没有创建角色并将用户添加到该角色中。这是我所拥有的 <script type="text/javascript"> Parse.initialize("key", "key"); //set the user var user = new Parse.User(); $( "form" ).submit(function( eve

我正在尝试基本上有一个注册表单,它将注册一个用户,并添加刚刚注册到certan角色的用户。我让应用程序注册了用户,但它没有创建角色并将用户添加到该角色中。这是我所拥有的

<script type="text/javascript">

    Parse.initialize("key", "key");

    //set the user
    var user = new Parse.User();

    $( "form" ).submit(function( event ) {

      //get the input data
      var username = $('#username').val();
      var email = $('#email').val();
      var password = $('#password').val();
      var facility = $('#facility').val();

      //Set the user info
      user.set("facility", "" + facility + "");
      user.set("username", "" + username + "");
      user.set("email", "" + email + "");
      user.set("password", "" + password + "");

      //Sign them up
      user.signUp(null, {
        success: function(user) {
          // Hooray! Let them use the app now.
          //Make the role
          var roleACL = new Parse.ACL();
          roleACL.setPublicReadAccess(true);
          var role = new Parse.Role("Pro", roleACL);
          role.getUsers().add(username);
          role.save();

          //Show and Hide the alert
          $('#successModal').modal('show');

          setTimeout(function(){
            $('#successModal').modal('hide')
          }, 4000);

          //Clear the form
          $( 'form' ).each(function(){
              this.reset();
          });

       },
        error: function(user, error) {
          // Show the error message somewhere and let the user try again.
          alert("Error: " + error.code + " " + error.message);
        }

      });

      return false

    });

</script>

初始化(“key”,“key”);
//设置用户
var user=new Parse.user();
$(“表格”)。提交(功能(事件){
//获取输入数据
var username=$('#username').val();
var email=$('#email').val();
var password=$('#password').val();
var facility=$('#facility').val();
//设置用户信息
user.set(“facility”,“facility+”);
user.set(“用户名”,“用户名+”);
user.set(“电子邮件”,“电子邮件+”);
user.set(“密码”,“密码+”);
//报名
user.signUp(null{
成功:功能(用户){
//万岁!让他们现在就使用这个应用。
//扮演角色
var roleACL=new Parse.ACL();
RoleCal.setPublicReadAccess(真);
var role=newparse.role(“Pro”,roleACL);
role.getUsers().add(用户名);
role.save();
//显示和隐藏警报
$('successModal').modal('show');
setTimeout(函数(){
$('successModal').modal('hide'))
}, 4000);
//清除表格
$('form')。每个(函数(){
这是reset();
});
},
错误:函数(用户,错误){
//在某个地方显示错误消息,然后让用户重试。
警报(“错误:+Error.code+”“+Error.message”);
}
});
返回错误
});
我的想法是创建用户,然后在成功创建用户时创建角色并将用户添加到该角色中。但似乎不起作用

将查询编码为用户

 querys a role

 then adds the user to the role

 var qu = new Parse.Query(Parse.User);
  var qr = new Parse.Query(Parse.Role);
  qr.get(roleId, {
  success: function(role) {
      _role = role;
      qu.get(userId, {
        success: function(user) {
            _role.getACL().setRoleReadAccess(_role, true);
            _role.getUsers().add(user);
            _role.save();
            response.success(_role.toJSON());
        },
        error: function(object, error) {
            console.log('got role, failed on get user');
        }
      });
对查询用户的代码进行编码

 querys a role

 then adds the user to the role

 var qu = new Parse.Query(Parse.User);
  var qr = new Parse.Query(Parse.Role);
  qr.get(roleId, {
  success: function(role) {
      _role = role;
      qu.get(userId, {
        success: function(user) {
            _role.getACL().setRoleReadAccess(_role, true);
            _role.getUsers().add(user);
            _role.save();
            response.success(_role.toJSON());
        },
        error: function(object, error) {
            console.log('got role, failed on get user');
        }
      });

其目的是将新保存的用户添加到现有角色,以便在保存用户时必须查询角色,而不是创建角色

由于必须保存用户、查询角色并保存该角色(必须按顺序执行的三个异步操作),因此建议使用承诺,以免代码出现无法理解的缩进,因此

// prepare the user as you have it, then
user.signUp().then(function(user) {
    // query the role, you can get it with the role name
    var roleQuery = new Parse.Query(Parse.Role);
    roleQuery.equalTo("name", "Pro");
    return roleQuery.first();
}).then(function(role) {
    role.getUsers().add(user);
    return role.save();
}).then(function() {
    // no need to set a timer. with the promise, we know exactly when we are done
    $('#successModal').modal('hide');
}, function(error) {
    alert("Error: " + error.code + " " + error.message);
});
请确保首先使用数据浏览器手动创建“Pro”角色。通读


另外请注意,如果每个用户都出现这种情况,那么角色代码是PFUser上
afterSave
云功能的一部分。目的是将新保存的用户添加到现有角色中,因此必须查询角色,而不是在保存用户时创建角色

由于必须保存用户、查询角色并保存该角色(必须按顺序执行的三个异步操作),因此建议使用承诺,以免代码出现无法理解的缩进,因此

// prepare the user as you have it, then
user.signUp().then(function(user) {
    // query the role, you can get it with the role name
    var roleQuery = new Parse.Query(Parse.Role);
    roleQuery.equalTo("name", "Pro");
    return roleQuery.first();
}).then(function(role) {
    role.getUsers().add(user);
    return role.save();
}).then(function() {
    // no need to set a timer. with the promise, we know exactly when we are done
    $('#successModal').modal('hide');
}, function(error) {
    alert("Error: " + error.code + " " + error.message);
});
请确保首先使用数据浏览器手动创建“Pro”角色。通读


另外请注意,如果每个用户都出现这种情况,那么角色代码是PFUser上
afterSave
cloud功能的一部分。

谢谢。我理解您在这里所经历的过程,但当我这样做时,我得到了一个
错误:101未找到要更新的对象
。我创建了这个角色,这段代码实际上已经注册了用户,但是我得到了一个错误,一个js
POSThttps://api.parse.com/1/classes/_Role/IwVmnoPJHx 404(未找到)
并且用户未连接到Core中的角色。因此,您可以在数据浏览器的_role表中看到名为“Pro”的角色吗?这应该通过简单查询的name列找到。“IwVmnoPJHx”是该角色对象的id吗?你能把它的图片粘贴到数据浏览器里吗,也许那里有线索。我在主要问题中添加了一些图片,我想现在似乎起作用了。我也不得不更改写作许可。谢谢。我理解您在这里所经历的过程,但当我这样做时,我得到了一个
错误:101未找到要更新的对象
。我创建了这个角色,这段代码实际上已经注册了用户,但是我得到了一个错误,一个js
POSThttps://api.parse.com/1/classes/_Role/IwVmnoPJHx 404(未找到)
并且用户未连接到Core中的角色。因此,您可以在数据浏览器的_role表中看到名为“Pro”的角色吗?这应该通过简单查询的name列找到。“IwVmnoPJHx”是该角色对象的id吗?你能把它的图片粘贴到数据浏览器里吗,也许那里有线索。我在主要问题中添加了一些图片,我想现在似乎起作用了。我也不得不改变写作许可。