ParseObject.save() 抛出 IllegalArgumentException(无法保存未经身份验证的用户)为啥?
Posted
技术标签:
【中文标题】ParseObject.save() 抛出 IllegalArgumentException(无法保存未经身份验证的用户)为啥?【英文标题】:ParseObject.save() throws IllegalArgumentException (Can't save a user that is not authenticated) WHY?ParseObject.save() 抛出 IllegalArgumentException(无法保存未经身份验证的用户)为什么? 【发布时间】:2014-12-07 14:36:28 【问题描述】:我在 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 输出:
【问题讨论】:
遇到同样的问题。我可以创建一个具有指向其他用户的字段的对象并第一次保存它。但是,稍后,我无法更新该对象。 嘿,你终于找到解决这个问题的方法了吗? 我的问题是在用户表中我有一个 JSonObject 作为字段。这意味着当您从该表中获取一行,并且该行与您的用户不匹配时,如果您获得 JSonObject 字段,则将该行解析为脏,然后尝试再次保存它。由于该行与您登录的 ParseUser 不匹配,因此会引发异常。故事的寓意:如果此对象必须由其他用户读取,则在 User 表中不要使用 JSonObjects。 【参考方案1】:来自官方docs
用户对象的安全性
默认情况下 ParseUser 类是安全的。存储在ParseUser
中的数据只能由该用户修改。默认情况下,任何客户端仍然可以读取数据。因此,一些ParseUser
对象经过身份验证并且可以修改,而其他对象是只读的。
具体来说,您不能调用任何保存或删除类型的方法,除非ParseUser
是使用经过身份验证的方法获得的,例如logIn
或signUp
。这确保只有用户可以更改自己的数据。
以下说明了此安全策略:
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();
);
从getCurrentUser()
获得的ParseUser
将始终被验证。
如果您需要检查ParseUser
是否经过身份验证,可以调用isAuthenticated()
方法。您无需将isAuthenticated()
与通过身份验证方法获得的ParseUser
对象进行检查。
【讨论】:
但我不是试图编辑 _User 中的一行,而是另一个表中的一行,其中 _User 只是一种列类型,该用户甚至是由 getCurrentUser() 获得的。所以??? 请提供完整的真实代码,有例外。通过您的伪代码或其中的一部分很难确定您做错了什么。以上是关于ParseObject.save() 抛出 IllegalArgumentException(无法保存未经身份验证的用户)为啥?的主要内容,如果未能解决你的问题,请参考以下文章
Django报错UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 9737: ill....
sklearn报错解决方案UndefinedMetricWarning: Precision is ill-defined and being set to 0.0
sklearn报错解决方案UndefinedMetricWarning: Precision is ill-defined and being set to 0.0