1

据我了解,用 couchdb 更新任何对象。我必须将整个对象发回,因为它实际上是在“插入”相同 ID 的新修订版。这一切都很整洁,而且效果很好。

但是后来我遇到了一个问题,我不太确定我应该如何处理。我有一个无法完全发送给我的用户的对象。我必须隐藏某些信息,例如密码哈希。

数据被发送到客户端,修订也被发送。现在,当我尝试更新我的对象时,我遇到了一个问题。由于缺少某些数据,更新将删除我的用户缺少的属性。

也就是说,我最简单的方法是从 couchdb 获取对象,检查 id 和 rev 是否​​匹配。如果匹配,则合并具有缺失属性的对象。它会很好地工作,我也可以支持删除属性。

然后使用这种技术,我可以将我的对象添加到缓存中,这将减少从数据库中查询频繁对象的时间。如果对象可以更新,则清除该 ID 的缓存。如果对象较新,那么我将不得不处理错误或合并对象。

有没有更好的“好方法”来处理这个问题?

编辑

经过一夜的思考,我想我找到了一个更好的解决方案。而不是在我的个人资料中包含我的用户名和密码。我将标识对象与使用配置文件分开。

换句话说,我必须尽可能多地拆分对象以保持隔离......从好的方面来说,我可以为一个配置文件添加多个身份验证,而不会弄乱配置文件本身。我可以在不返回任何秘密对象的情况下返回配置文件和任何必要的东西。

它会使插入的逻辑有点复杂,但它应该很容易......

  1. 使用 uuid api“_uuids”从 couchdb 获取 1 个 id
  2. 使用该 uuid 插入密码身份验证(用户名、密码、profile_id)
  3. 如果成功,则使用我们在 1 处获得的 uuid 插入配置文件

如果发生任何错误,回滚并告诉用户出了什么问题。

此外,这种方法的好处是我可以使用配置文件 ID 为 oauth2 添加 access_token,并且逻辑几乎与密码相同,身份验证类型会有所不同,但任何身份验证类型都应该几乎相同。

4

1 回答 1

1

是的,从档案文件中提取秘密内容听起来像是要走的路。

于 2013-05-20T09:19:29.133 回答