3

我尝试过以与更新 PFUser 电子邮件相同的方式进行更新,甚至尝试转换 obj-c 代码(来自其他问题);都没有工作。我也不知道如何使用 Cloud Code(嗯......我安装了它,但我不知道如何将信息传递到 Cloud Code 或如何使用 JavaScript)。有没有办法在不发送重置电子邮件的情况下更新用户密码?

4

2 回答 2

8

出于安全原因,您不能以这种方式更改用户的密码。你有两个选择

  • 密码重置电子邮件

  • 云码功能重置密码

据我了解,您不了解 JavaScript,这里有一个云代码函数,可用于重置用户密码,以及使用 Swift 调用该函数的方法。

功能(在 JavaScript 中):

Parse.Cloud.define("changeUserPassword", function(request, response) {
  // Set up to modify user data
  Parse.Cloud.useMasterKey();
var query = new Parse.Query(Parse.User);
query.equalTo("username", request.params.username);  // find all the women
query.first({
  success: function(myUser) {
    // Successfully retrieved the object.
myUser.set("password", request.params.newPassword);

myUser.save(null, {
        success: function(myUser) {
          // The user was saved successfully.
          response.success("Successfully updated user.");
        },
        error: function(myUser, error) {
          // The save failed.
          // error is a Parse.Error with an error code and description.
          response.error("Could not save changes to user.");
        }
      });

  },
  error: function(error) {
    alert("Error: " + error.code + " " + error.message);
  }
});
});

调用上述函数的 Swift 代码:

PFCloud.callFunctionInBackground("changeUserPassword", withParameters: ["username" : "MyCoolUsername", "newPassword" : passwordField.text]) {
  (result: AnyObject?, error: NSError?) -> Void in
  if (error == nil) {
    // result is "Successfully updated user."
  }
}

祝你好运!

于 2015-02-13T19:04:35.270 回答
1

是的,密码可以在没有云代码和电子邮件的情况下更改。更改当前用户会话的“密码”字段后会重置,但您可以通过再次调用 PFUser.logInWithUsername 来恢复它。

let currentUser = PFUser.current()
currentUser!.password = "<new_password>"

currentUser!.saveInBackground() { (successed, error) in
    if successed {
        PFUser.logInWithUsername(inBackground: currentUser!.email!, password: currentUser!.password!) { (user, error) in
            // Your code here...
        }
    }
}
于 2017-04-26T11:44:20.577 回答