我让用户更改他的凭据。 他键入了新的用户名,电子邮件和密码,我想:
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();
这不仅仅会放置"东西",但也会将密码更改为" MY NEW PW" ..而用户不知道
有没有办法重置本地password
字段,而fetch()
以外的字段不起作用?我知道我可以通过三种不同的查询来保存用户名,电子邮件和密码,但这不是我案例的可能解决方案。
答案 0 :(得分:1)
解决方法可以使用
+ becomeInBackground:
保存失败时,在PFUser类上(使用PFUser.currentUser()。sessionToken作为标记),但仍然存在使getsInBackground失败的风险。 它至少可以防止某些情况发生如果,成为InBackground有效地取消了setPassword,并接受当前的sessionToken作为参数,我还没有测试过
答案 1 :(得分:1)
查看我在更新日志中读到的最新版本:
V1.10.2 - 2015年9月15日
新增:添加了ParseObject.revert()和revert(key)以允许还原 肮脏的变化
看起来可能就是这样。这绝对是必要的。
答案 2 :(得分:0)
如果是我的问题,我会首先尝试创建一个oldUser并将所有当前数据保存到它,然后当失败时,是时候将每个东西都改回正常值,或者如果成功则是时候杀死oldUser 。希望它可能有所帮助。
答案 3 :(得分:0)
密码纯文本未存储在Parse中,因此您的应用无法获取密码纯文本。在https://www.parse.com/questions/get-current-users-password-to-compare-it-with-a-string
找到它如果您想更改密码,可以使用ParseUser.requestPasswordResetInBackground()
,这样您就可以在电子邮件的帮助下更改密码。
但是如果你需要真的很难获得密码,你可以在登录后将其存储在SharedPreferences
。
答案 4 :(得分:0)
经过一些测试和检查,这里有一些结论。
所以,我认为如果你需要上面的工具,请尝试这种方式
// First time register //
ParseUser user = ParseUser.getCurrentUser();
user.setUsername("MY NAME");
user.setEmail(email);
user.setPassword("MY PW");
user.put("_password", "MY PW");
// The key can't use "password", this's reserve key word in Parse //
user.saveInBackground(...);
// Next time update //
user.setUsername("MY NEW NAME");
user.setPassword("MY NEW PW");
user.saveInBackground(...);
// if have something exception //
user.fetch();
// user.setPassword(user.get("_password"));
user.save();
ParseUser.login("MY NAME", "MY PW"); // Error
ParseUser.login("MY NAME", "MY NEW PW"); // Ok
user.fetch();
user.setPassword(user.get("_password"));
user.save();
ParseUser.login("MY NAME", "MY PW"); // OK