javascript - 如何在Sails.js中保护蓝图访问

javascript - 如何在Sails.js中保护蓝图访问,第1张

所以我对Sails.js很陌生,但它似乎带来了很多这样的蓝色印刷品,

现在我有2个模型,Accounts / Friends

正在使用关联,因为Accounts有很多Friends

在我的客户端,我有办法向用户发送通知,其中一个是朋友请求,以便工作正常,它为用户提供接受或拒绝邀请的选项

以下是代码:

socket.on('accounts', function(data) {
    if (data.verb === "addedTo" && data.attribute === "notifications") {
      socket.get('/notifications/'   data.addedId, function(note) {
        console.log(note);
        if (!$.isEmptyObject(note)) {
          $scope.notifications.push({
            'text': note.from_name   ' sent you a friends request',
            'id':   note.id,
            'type': note.type,
            'from_id': note.from_id
          })
          $.notify('You have a new notification', 'info');
          $scope.$digest();
        }
      })
    }
  })

$scope.accept = function(notificationId, fromId) {

}

当人们按下“接受”按钮时,我想为接受通知的人和发送通知的人添加一个朋友,以便它们是相互的,并且他们彼此是朋友。

我可以通过创建一个数据对象并为他们两个朋友做socket.post,然后执行socket.put更新通知作为正在读取并处理它来完成此操作

唯一的问题是,我不希望人们进入并打开JS控制台和垃圾邮件socket.post一百万朋友恶意地向人们提供

var obj {
  'friend_name': 'Bill',
  'online': 1
}

socket.post('/accounts/1/friends', obj);

那么,我如何保护这一点,以便访问post/accounts/1/friends的人只是应该访问此内容的人?

如果我没有意义,那就问问。谢谢!

被垃圾邮件的例子:

有人打开JS控制台并进入

var obj = { friend_name: 'bill', owner: 1 }; io.socket.post('/friends', obj);

500次现在id 1的帐户有500个名为bill的朋友

最佳答案:

1 个答案:

答案 0 :(得分:2)

如果我误解了某些事情,请纠正我,但我认为你的逻辑是错误的。

我认为Bill也是一个帐户,但是当你只添加他的名字时,你不会与他的帐户信息有任何联系,也只能通过名字识别他。为了进行某种验证,您需要一个唯一的Bill标识符。您可以添加account_idowner来代替名称。

所以,如果有3个帐户:

  1. 克里斯
  2. 比尔
  3. 您将添加var obj = { account_id: 2, owner: 1 };

    这样,在添加新朋友之前,如果有account_id和所有者的朋友已经存在,您可以与policies核对。如果您对如何使用政策有任何疑问,请询问。

    无论如何,我认为更好的方法是仅与该模型建立一个模型和many to many关系。帐户将通过Sails将创建的第三个表(将成为您的朋友表)与自身建立多对多的关系。在新表中,您将有两个包含帐户ID的列。如果让我们在第一行说出你有1个和2个,这意味着克里斯和比尔都是朋友,你可以想出一些逻辑来确保行总是唯一的,这样你就不会有垃圾邮件问题。仅仅为了记录,我还没有与一个模型做过多对多的关系,所以你必须弄清楚它是如何完成的。

    本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复