Parse platform 未保存解析云代码中的更新用户对象

Parse platform 未保存解析云代码中的更新用户对象,parse-platform,parse-cloud-code,parse-javascript-sdk,Parse Platform,Parse Cloud Code,Parse Javascript Sdk,目前,我正在尝试从parse云代码更新用户名和密码,但在parse.com控制台中,我看到了成功消息,但该对象实际上并未保存在parse.com数据库中。以下是cloud/main.js // code to update username Parse.Cloud.define("updateUserName", function(request, response){ if(!request.user){ response.error("Must be signed in to upd

目前,我正在尝试从parse云代码更新用户名和密码,但在parse.com控制台中,我看到了成功消息,但该对象实际上并未保存在parse.com数据库中。以下是cloud/main.js

// code to update username
Parse.Cloud.define("updateUserName", function(request, response){
if(!request.user){
    response.error("Must be signed in to update the user");
    return;
}
Parse.Cloud.useMasterKey();
var userId = request.params.id;
var userName = request.params.userName; 
// var User = Parse.Object.extend("User");
var updateQuery =  new Parse.Query(Parse.User); 
updateQuery.get(userId,{
    success: function(userRecord){
        console.log(userRecord.get("id"));
        userRecord.set("username", userName);
        // userRecord.set("resetToken", "Apple");
        userRecord.save(null,{
            success: function(successData){                 
                response.success("username updated successfully.");
                // userRecord.fetch();                  
            },
            error: function(errorData){
                console.log("Error while updating the username: ",errorData);

            }
        });

    },
    error: function(errorData){
        console.log("Error: ",errorData);
    }
});
});

Parse.Cloud.define("resetPassword", function(request, response){
var successMsg = "";
if(!request.user){
    response.error("Must be signed in to update the user");
    return;
}
Parse.Cloud.useMasterKey();
var resetToken = request.params.resetToken;
var password = request.params.password; 
// var User = Parse.Object.extend("User");
var updateQuery =  new Parse.Query(Parse.User);
// updateQuery.equalTo("resetToken", resetToken);
updateQuery.get(resetToken,{
    success: function(userRecord){
        // console.log(userRecord.get("id"));
        // userRecord.set("password",password)
        userRecord.set("password",password);          
        userRecord.save(null, {
            success: function(successData){
                successMsg = "Password Changed !";
                console.log("Password changed!");
                userRecord.set("resetToken", "");
                userRecord.save();
            },
            error: function(errorData){
                response.error("Uh oh, something went wrong");
            }
        })


    },
    error: function(errorData){
        console.log("Error: ",errorData);
    }
});
response.success(successMsg);
});
$(".update-user").click(function(){
   Parse.Cloud.run("updateUserName", {id: $(this).data("id"), username:   $(".uname").val()},
       {
         success: function(successData){
         console.log("username updated successfully.");
         $("#editModal").modal("hide");
         $(".edit-modal").hide();
       },
       error: function(errorData){
       }
   });
});
代码实际上运行时没有任何错误,但它不会更新数据库中的值。下面是我在js/index.js中调用这些云函数的方法

// code to update username
Parse.Cloud.define("updateUserName", function(request, response){
if(!request.user){
    response.error("Must be signed in to update the user");
    return;
}
Parse.Cloud.useMasterKey();
var userId = request.params.id;
var userName = request.params.userName; 
// var User = Parse.Object.extend("User");
var updateQuery =  new Parse.Query(Parse.User); 
updateQuery.get(userId,{
    success: function(userRecord){
        console.log(userRecord.get("id"));
        userRecord.set("username", userName);
        // userRecord.set("resetToken", "Apple");
        userRecord.save(null,{
            success: function(successData){                 
                response.success("username updated successfully.");
                // userRecord.fetch();                  
            },
            error: function(errorData){
                console.log("Error while updating the username: ",errorData);

            }
        });

    },
    error: function(errorData){
        console.log("Error: ",errorData);
    }
});
});

Parse.Cloud.define("resetPassword", function(request, response){
var successMsg = "";
if(!request.user){
    response.error("Must be signed in to update the user");
    return;
}
Parse.Cloud.useMasterKey();
var resetToken = request.params.resetToken;
var password = request.params.password; 
// var User = Parse.Object.extend("User");
var updateQuery =  new Parse.Query(Parse.User);
// updateQuery.equalTo("resetToken", resetToken);
updateQuery.get(resetToken,{
    success: function(userRecord){
        // console.log(userRecord.get("id"));
        // userRecord.set("password",password)
        userRecord.set("password",password);          
        userRecord.save(null, {
            success: function(successData){
                successMsg = "Password Changed !";
                console.log("Password changed!");
                userRecord.set("resetToken", "");
                userRecord.save();
            },
            error: function(errorData){
                response.error("Uh oh, something went wrong");
            }
        })


    },
    error: function(errorData){
        console.log("Error: ",errorData);
    }
});
response.success(successMsg);
});
$(".update-user").click(function(){
   Parse.Cloud.run("updateUserName", {id: $(this).data("id"), username:   $(".uname").val()},
       {
         success: function(successData){
         console.log("username updated successfully.");
         $("#editModal").modal("hide");
         $(".edit-modal").hide();
       },
       error: function(errorData){
       }
   });
});
我在firefox控制台中看到的内容
用户名已成功更新。
我在parse.com控制台中看到的内容

I2015-12-11T06:15:13.361Z]v106 Ran cloud function updateUserName for user chfgGhaPEl with:
Input: {"id":"MAvm9FlGgg","username":"testuser12"}
Result: username updated successfully.

但是这行代码
userRecord.set(“resetToken”,“Apple”)
正在更新数据库中的resetToken列,但为什么它不允许我更新用户名/密码(或我没有尝试更新的其他列)列?

我分析您的代码。在将用户id指定为查询约束的位置,使用first,而不是使用get检索相关用户。下面是一个示例(工作)代码,其中用户信息在Parse user表中更新。希望这有帮助

问候

Parse.Cloud.define("updateUser", function(request, response) 
{
  Parse.Cloud.useMasterKey();
  var query = new Parse.Query(Parse.User);
  var objectId = request.params.objectId;
  var username = request.params.username;
  var email = request.params.email;
  var userType = request.params.userType;
  var password = request.params.password;

  query.equalTo("objectId", objectId);
  query.first({
      success: function(object) 
      {
        object.set("username", username);
        object.set("email", email);
        object.set("userType", userType);
        object.set("password", password);
        object.save();
        response.success("Success");
      },
    error: function(error) {
      alert("Error: " + error.code + " " + error.message);
      response.error("Error");
    }
  });
}); 
对我有用的是

//cloud/main.js
Parse.Cloud.define("updateUserName", function(request, response){
if(!request.user){
    response.error("Must be signed in to update the user");
    return;
}
if(request.params.IsAdmin == false){
    response.error("Only the administrators can edit username.");
    return; 
}
Parse.Cloud.useMasterKey();
// var userId = request.params.Id; --> I guess he was the main culprit,  the params and the actual column value should match. Instead of passing Id from my client code(see below) I just passed objectId and it worked.
var userId = request.params.objectId;
// var userName = request.params.username;  
var name = request.params.name;
// var User = Parse.Object.extend("User");
var updateQuery =  new Parse.Query(Parse.User); 
console.log("id from params: "+userId);
updateQuery.equalTo("objectId", userId);
updateQuery.first({
    success: function(userRecord){          
        // userRecord.set("username", userName);
        userRecord.set("name", name);           
        userRecord.save(null,{
            success: function(successData){                 
                response.success("username updated successfully.");
                userRecord.fetch();                 
            },
            error: function(errorData){
                console.log("Error while updating the username: ",errorData);

            }
        });         

    },
    error: function(errorData){
        console.log("Error: ",errorData);
        response.error(errorData);
    }
});
});

// js/index.js
/* initially I was using Id instead of objectId, the field names are case
sensitive
Parse.Cloud.run("updateUserName", {id: $(this).data("id"), name:   $(".name").val(),IsAdmin: Parse.User.current().get("IsAdmin") },*/
Parse.Cloud.run("updateUserName", {objectId: $(this).data("id"), name: $(".name").val(),IsAdmin: Parse.User.current().get("IsAdmin") },
        {
            success: function(successData){
                console.log("username updated successfully.");
                $("#editModal").modal("hide");
                $(".edit-user-server-error").html("");
                $(".edit-modal").hide();
                location.reload();                    
            },
            error: function(errorData){
                console.log(errorData);
                $(".edit-user-server-error").html("");
                $(".edit-user-server-error").html(errorData.message);

            }
        });
所以我提到了这一点,它给了我一个提示,基于此,我只做了一个尝试和错误的事情,并让它工作

您可以将参数中的任何类型的值传递给此云函数,因此您可能希望准确地指定希望以这种方式更新的属性。另外,不要忘记实际验证request.user是否被允许执行这样的操作


Parse不支持保存数据的HTTP PUT请求。因此,我们需要使用包含方法调用的PUSH请求来保存数据


但是,它必须有一行代码,
Parse.Cloud.useMasterKey()

您好,我甚至将query.first与query.get绑定在一起(userId…,但它仍然指向第一个用户的id
I2015-12-11T13:34:25.178Z]v130为用户chfgGhaPEl运行了云函数forgotPasswordEmail:
,但请求的用户在表中有不同的对象id。它没有更新此用户的重置令牌。怎么了???不,它没有工作。
updateQuery.first({success:function(userRecord){userRecord.set(“username”,username);userRecord.save();response.success(“username更新成功”);},错误:function(errorData){console.log(“error:,errorData);}});
小心!!传入“isAdmin”让你的云代码成为值得尊敬的攻击对象,因为黑客所要做的就是输入“isAdmin”:如果是真的,他们就可以访问。注意。