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 是使用经过身份验证的方法获得的,例如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();
  
);

getCurrentUser() 获得的ParseUser 将始终被验证。

如果您需要检查ParseUser 是否经过身份验证,可以调用isAuthenticated() 方法。您无需将isAuthenticated() 与通过身份验证方法获得的ParseUser 对象进行检查。

【讨论】:

但我不是试图编辑 _User 中的一行,而是另一个表中的一行,其中 _User 只是一种列类型,该用户甚至是由 getCurrentUser() 获得的。所以??? 请提供完整的真实代码,有例外。通过您的伪代码或其中的一部分很难确定您做错了什么。

以上是关于ParseObject.save() 抛出 IllegalArgumentException(无法保存未经身份验证的用户)为啥?的主要内容,如果未能解决你的问题,请参考以下文章

列转行

记一次最新的c#ill2cpp热更方案

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

Tomcat 9 无效的密钥库密码