【问题标题】:How to change PFUser password in Swift?如何在 Swift 中更改 PFUser 密码?
【发布时间】:2015-02-13 00:01:37
【问题描述】:

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

【问题讨论】:

    标签: ios swift parse-platform pfuser


    【解决方案1】:

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

    • 密码重置电子邮件

    • 云码功能重置密码

    据我了解,您不懂 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."
      }
    }
    

    祝你好运!

    【讨论】:

    • 嘿,谢谢!但是,因为我使用的是免费帐户,所以我没有空间让它成为“工作”。有没有办法让它成为一个函数(“定义”)?
    • 当我尝试更改它时,它不允许我部署
    • 实际上,看起来 parse 并没有将其视为一项工作。你能解释一下为什么吗,因为我很确定如果你把“.job”放在它上面,让它成为一个工作......而不是一个函数......
    • @nick9999 嗨,我很抱歉我不是故意放“.job”的。我本来想把它变成一个函数,但我写答案的时候很着急。
    • 好的,谢谢你让我知道......但是当我尝试部署时,终端说第 1 行有语法错误
    【解决方案2】:

    是的,密码可以在没有云代码和电子邮件的情况下更改。更改当前用户会话的“密码”字段后会重置,但您可以通过再次调用 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...
            }
        }
    }
    

    【讨论】:

    • 假设如果用户通过 facebook 登录,那么这将如何工作以及用户将如何通过 facebook 再次登录?
    • @MuseerAnsari 如果用户使用 facebook 登录,那么他们不必首先更改密码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 2011-04-09
    • 1970-01-01
    • 2018-07-23
    • 2019-05-22
    • 1970-01-01
    相关资源
    最近更新 更多