簡體   English   中英

如何在Sails.js中保護藍圖訪問

[英]How to secure blueprint access in Sails.js

因此,我對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的朋友

如果我誤解了一些內容,請糾正我,但我認為您的邏輯是錯誤的。

我認為Bill也是一個帳戶,但是當您僅添加他的名字時,您與他的帳戶信息沒有任何關系,並且只能通過名稱來識別他。 為了進行某種驗證,您將需要Bill的唯一標識符。 除了名稱,您可以添加account_idowner

因此,如果有3個帳戶:

  1. 克里斯
  2. 法案

您將添加var obj = { account_id: 2, owner: 1 };

這樣,您可以在添加新朋友之前,通過策略檢查是否存在具有account_id和擁有者的朋友。 如果您對如何使用政策有任何疑問,請詢問。

無論如何,我認為更好的方法將是僅具有一個模型,並且僅與該模型建立多對多關系。 帳戶將通過Sails創建的第三個表(將成為您的Friends表)與其自身建立多對多關系。 這樣,在新表中將有兩列包含帳戶ID。 如果在第一行中假設您的ID為1和2,這意味着Chris和Bill都是朋友,那么您可以考慮一些邏輯以確保行始終是唯一的,這樣您就不會遇到垃圾郵件問題。 僅出於記錄目的,我沒有與一種模型建立多對多關系,因此您必須弄清楚它是如何完成的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM