ParseObject.save()抛出IllegalArgumentException(无法保存未经过身份验证的用户)为什么?

时间:2014-12-07 14:36:28

标签: android parse-platform save

我在db中有一个表,我们可以称之为" A"只有2列:

user (Pointer _User)
b (Pointer "B") (where "B" is another table in my db)

代码是:

    a.put("b", b);
    a.put("user", ParseUser.getCurrentUser());
    a.save(); //I manage my threading

在a.save()上抛出了标题中的IllegalArgumentException,有人可以解释一下为什么?在" B"在那里有一个指向另一个_User的列,我希望这个问题不依赖于这个!!!

这是logcat输出:

logcat output

1 个答案:

答案 0 :(得分:0)

来自官方docs

用户对象的安全性

默认情况下,ParseUser类是安全的。存储在ParseUser中的数据只能由该用户修改。默认情况下,任何客户端仍可读取数据。因此,一些ParseUser对象被认证并且可以被修改,而其他对象是只读的。

具体来说,除非ParseUser是使用经过身份验证的方法获得的,否则您无法调用任何保存或删除类型方法,例如logInsignUp。这可确保只有用户才能更改自己的数据。

以下说明了此安全策略:

ParseUser user = ParseUser.logIn("my_username", "my_password");
user.setUsername("my_new_username"); // attempt to change username
user.saveInBackground(); // This succeeds, since the user was authenticated on the device

// Get the user from a non-authenticated manner
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.getInBackground(user.getObjectId(), new GetCallback<ParseUser>() {
  public void done(ParseUser object, ParseException e) {
    object.setUsername("another_username");

    // This will throw an exception, since the ParseUser is not authenticated
    object.saveInBackground();
  }
});

ParseUser获得的getCurrentUser()将始终通过身份验证。

如果您需要检查ParseUser是否已通过身份验证,则可以调用isAuthenticated()方法。您无需使用通过身份验证方法获取的isAuthenticated()个对象检查ParseUser