2015-02-13 2 views
3

Я пробовал обновление так же, как вы обновляли электронную почту PFUser и даже пытались конвертировать OBJ-код (из других вопросов); ни работали. Я также не знаю, как использовать Cloud Code (ну ... я его установил, но я не знаю, как передавать информацию в Cloud Code или как использовать JavaScript). Есть ли способ обновить пароль пользователей, не отправляя сброс электронной почты?Как изменить пароль PFUser в Swift?

ответ

7

Вы не можете изменить пароль пользователя таким образом из соображений безопасности. У вас есть два варианта

  • Сброс пароля Email

  • Облако Код Функция для сброса пароля

Как я понимаю, что вы не знаете 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." 
    } 
} 

Успехов!

+0

Эй, спасибо! Однако, поскольку я использую бесплатную учетную запись, у меня нет места, чтобы она была «работой». Есть ли способ сделать это функцией («define»)? – nick9999

+0

Когда я пытаюсь изменить его, он не позволяет мне развертывать – nick9999

+0

На самом деле, похоже, что синтаксис НЕ рассматривает его как работу. Не могли бы вы просто объяснить, почему, потому что я был уверен, что вы положите «.job», что делает его работой ... не функция .... – nick9999

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... 
     } 
    } 
} 
+0

Предположим, что если пользователь вводит логин через facebook, то как это будет работать и как пользователь снова войдет через facebook? –

+0

@MuseerAnsari Если вы входите в систему с помощью facebook, тогда им не нужно менять пароль на первом месте –