Я разрешаю пользователю изменять свои учетные данные. Он вводит новое имя пользователя, адрес электронной почты и пароль, и я люблю:
ParseUser user = ParseUser.getCurrentUser();
user.setUsername("MY NEW NAME");
user.setEmail(email);
user.setPassword("MY NEW PW");
user.saveInBackground(...);
И что? Таким образом, вызов save() может завершиться неудачно, по большому числу причин (например: имя пользователя, уже принятое кем-то другим). Я могу сказать, что в этом случае ни одно из указанных выше полей не обновляется, что справедливо: я показываю ошибку, пользователь знает, что все пошло не так.
Все становится сложнее, если вы заметите, что даже после ParseException, user выше хранит свои грязные поля, которые не могут быть сохранены на сервере. То есть.
//saveInBackground fails
//...
user.getUsername().equals("MY NEW NAME") // true!
Проблема
Теперь я могу вернуть эти поля к правильным значениям, вызвав user.fetch(), но это не работает с полем password.
Это особенно нежелательно, потому что любой будущий вызов save() или такой (который может не сработать, потому что, возможно, это совершенно другой звонок) также обновит пароль! То есть.
//later
ParseUser user = ParseUser.getCurrentUser();
user.put("stuff");
user.save();
Это не только поместит "материал", но также изменит пароль на "МОЙ НОВЫЙ PW" .. без ведома пользователя.
Есть ли способ reset локального поля password, кроме fetch(), который не работает? Я знаю, что могу сохранить имя пользователя, адрес электронной почты и пароль с тремя различными запросами, но это не возможное решение для моего дела.