我正在制作一个使用帐户包和脸谱图API的应用程序。特别是朋友api。朋友api返回使用该应用程序的所有Facebook好友。问题是它返回了facebook id,而帐户包生成了特定于应用程序的id。当我想从包含朋友信息的集合中检索信息但是与特定于应用程序的id一起存储时,这是有问题的。我通过在集合中存储fb id和account id来解决这个问题。
但我仍然无法根据用户数据更新用户数据,因为只允许使用特定于应用程序的ID进行更新。我想要什么,但不允许:
UserData.update({fbId: friend.fbId},{$push: {some: data}});
我能想到的唯一解决方案是首先获得每个用户ID,如下所示:
var friendId = UserData.findOne({fbId: friend.fbId})._id;
这显然不是一个好的解决方案,因为每次更新都需要一次额外的db调用。
有没有办法在创建时将帐户ID设置为等于facebook ID?或者你有任何其他建议。
答案 0 :(得分:0)
扩展上述评论:
MoeRum:@Xinzz UserData是一个自定义集合。如果尝试用fbId更新,我得到了 以下错误:未捕获错误:不允许。不受信任的代码可能 仅按ID更新文档。 [403]
这是因为您正在尝试在客户端进行更新。您只能在客户端按ID进行更新。只要您在服务器上执行此操作,您尝试执行的操作就不应成为问题。
来自Meteor文档(更多参考:http://docs.meteor.com/#/full/update):
更新的行为取决于是否被调用 受信任或不受信任的代码。可信代码包括服务器代码和 方法代码。不受信任的代码包括客户端代码,例如事件 处理程序和浏览器的JavaScript控制台。
可信代码可以通过设置multi来一次修改多个文档 是的,并且可以使用任意Mongo选择器来查找文档 修改。它绕过allow和deny设置的任何访问控制规则。 将从更新调用返回受影响文档的数量 如果你没有通过回调。
不受信任的代码只能一次修改单个文档 它的_id。只有在检查之后才允许修改 适用的允许和拒绝规则。受影响的文件数量 返回回调。不受信任的代码无法执行upsert, 除了在不安全的模式下。