【发布时间】:2014-12-07 11:25:08
【问题描述】:
我正在使用 Meteor 开发一个消息传递应用程序。出于安全原因,我禁用了从客户端调用的任何插入/更新/删除。现在插入消息的唯一方法是使用方法。
Meteor.methods({
sendMessage: function (text) {
Messages.insert({ userId: Meteor.userId(), roomId: Rooms.findOne()._id, name: Meteor.users.find(Meteor.userId()).fetch()[0].profile.name , message: text });
}
});
这种方法只询问消息的内容,因此用户无法使用其他名称调用该方法或尝试将相同的消息发送到其他聊天室。
我是使用 Meteor 的初学者,所以我想知道,在服务器上运行的真实方法(不是 Stub)不会从 userId 和 roomId 获得不同的值吗?服务器上的 Rooms.findOne()._id 可以是 db 上的任何随机房间文档,以及 userId 任何用户。
如果是这种情况,我将不得不在函数中包含额外的参数,这会使其安全性大大降低。
我可能不了解这里的方法。
【问题讨论】: