android - Google Cloud Datastore/Mobile Backend Starter - update/updateAll 调用权限失败

标签 android google-app-engine google-cloud-datastore

使用 Mobile Backend Starter (MBS) Android 类(在 Google Dev Console 中创建新项目并在 Google I/O 2013 上演示时作为示例项目分发的类)我能够将新实体插入云数据存储通过调用 CloudBackendMessaging.insertAll 或 .updateAll。如果实体不存在,后者将创建实体,因此看起来在功能上与插入新记录相同。

插入/创建工作正常。但是,当我尝试更新数据存储中的现有条目时,我收到了权限错误,例如(来自后端日志)

Method: mobilebackend.endpointV1.updateAll

Error Code: 401

Reason: required

Message: Insuffient permission for updating a CloudEntity: XXXXXX by: USER: YYYYYYY

这会导致 logcat 客户端出现匹配访问错误。

在所有情况下,我都使用有效的 Google 帐户(我自己的帐户)进行安全访问身份验证。

因此,插入的实体显示为我的用户 ID“拥有”,“更新者”和“创建者”显示我的 Google 帐户的电子邮件地址。

但是,当更新现有记录时,使用完全相同的 CloudBackendMessenger 对象并因此使用相同的凭据等。后端告诉我由于权限问题无法更新。但可以肯定的是,如果我只是用相同的凭据创建实体,那肯定是不正确的?查看文档,似乎我应该能够在所有情况下编辑同一用户 ID 拥有的实体(无论 KindName 是什么,也不管它是前置的 [public]、[private] 还是什么都没有)。

任何通过 Mobile Backend Starter for Datascore 收到更新权限错误的人都可以解释一下吗?今天大部分时间我都在为此苦思冥想。

最佳答案

在使用 cloudBackendAsync.update(cloudEntity) 时,我遇到了类似的错误“更新 CloudEntity 的权限不足”。我通过确保 cloudEntity 具有它的 createdAt 字段集来解决它。 createdAt 是自动生成的,我认为我不应该碰它。但这对我有用。就我而言,我首先获取云实体列表。这是我获得云实体的 createdAt 字段的时间。然后,当我更新时,我从以前获得的实体中设置 createdAt 字段。 编辑:也必须为所有者字段做类似的事情。

关于android - Google Cloud Datastore/Mobile Backend Starter - update/updateAll 调用权限失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23231800/

相关文章:

docker - 如何在 Docker 容器中启动和保留后台进程

google-app-engine - 实例 Key 或 ID 的 NDB 投影

google-app-engine - GAE EntityManager 发现抛出 null

google-app-engine - 谷歌应用引擎数据存储 : How to get entity by ID/Name if parent key is unknown?

java - Android Json Parse 不返回任何内容

java - MVP 安卓 : how to pass data from one activity to another?

java - 如何使用应用程序引擎中生成的默认ID

android - TextView 的文字对齐方式太可怕了!如何解决它?

java - Android:基于两个微调器选择组合的操作

python - 如何在谷歌应用程序引擎中的同一域中同时部署python和node js?