Realm Device Sync写入自定义用户数据报无规则错误如何解决
问题根因
报错核心原因是Realm Device Sync的同步权限,和通过mongoClient直连Atlas集群的数据访问权限是两套完全独立的配置。你目前只配置了Sync同步相关的权限,没有给mongodb-atlas数据服务下的UserAPI.Users集合配置对应访问规则,所以插入请求直接被服务端拦截。
解决步骤
- 打开Atlas App Services控制台,进入你当前使用的应用,在左侧菜单栏找到「Data Access」分类下的「Rules」入口(注意不是Device Sync菜单里的Permissions配置页)
- 在规则页点击「Add collection」新增集合规则,按以下参数填写:
- 关联集群选择
mongodb-atlas - 数据库名输入
UserAPI,集合名输入Users - 权限模板优先选择
Users can only read and write their own data快速验证,后续可根据需求收紧权限 - 字段匹配规则设置为:文档
_id字段等于认证用户的id字段,和你代码里插入数据时"_id": AnyBSON(user.id)的逻辑完全对应
- 关联集群选择
- 保存规则后等待1~2分钟让配置分发生效,再重新测试登录写入流程即可
额外优化点
- 自定义用户数据集合不需要加入Realm Sync的同步分区配置,这类数据由App Services直接管理,加入同步规则反而可能引发权限冲突
- 你当前的代码在插入自定义数据成功后,没有主动刷新用户自定义数据缓存,需要在插入成功的回调里调用
user.refreshCustomData(),否则后续读取user.customData仍然会是空值 - 如果配置规则后依然报错,回到「Custom User Data」配置页,确认选中的集群、数据库、集合名称和你配置规则的
UserAPI.Users完全一致,用户ID关联字段选择_id
内容的提问来源于stack exchange,提问作者grandsirr
相关产品推荐
相关产品推荐

