Я разрешаю пользователю изменять свои учетные данные. Он вводит новое имя пользователя, адрес электронной почты и пароль, и я люблю:
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()
, который не работает? Я знаю, что могу сохранить имя пользователя, адрес электронной почты и пароль с тремя различными запросами, но это не возможное решение для моего дела.