我創建了一個社交網絡,發展得非常好。我想使用socket.io和節點實現實時通知。如何在socket.io和node js上保護用戶的「通道」?
好吧。已經做了,而且它以這種方式工作...
用戶A發送消息給用戶B,比節點服務器通過EMIT通知寫入該bellongs到用戶B通道
每個用戶連接到它是瀏覽網站時自己的頻道:
<script type="text/javascript">
var socket = io.connect('https://notificationserver.com/');
socket.on('notifications_USERID', function(data) {
var data_type=data.data_type;
//sample
if(data_type=="message"){
$.notify("You got a new message", "success");
}
});
</script>
很簡單。用戶的頻道是notifications_USERID。
這不是安全的場外。如果有人將html頁面保存到它的計算機並加載它,他們將獲得特定的用戶通知。
那麼,什麼纔是最好的方法,使其安全和可訪問只有真正的登錄用戶?
UPDATE
我使用curl數據發送到節點服務器,就像這樣:
$curl = curl_init();
$data = json_encode(array("receiverid"=>$uid,"secret"=>"SOMESECRET"));
curl_setopt($curl, CURLOPT_URL, "http://notificationserver:1334");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_TIMEOUT, 1);
curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,1);
curl_exec($curl);
THIS IS MY APP.JS FILE
var http = require('http'),
fs = require('fs');
var key="SOMESECRET";
var app = http.createServer(function (request, response) {
if (request.method == 'POST') {
var body = '';
var jsonString = '';
request.on('data', function (data) {
body += data;
jsonString += data;
if (body.length > 1e6) {
request.connection.destroy();
}
});
request.on('end', function() {
var json_data=JSON.parse(jsonString);
var receiverid=json_data.receiverid;
var secret=json_data.secret;
if(secret==key){
NewMessageNotify(receiverid);
}else{
request.connection.destroy();
}
});
}else{
response.writeHead(200, {'Content-Type': 'text/html'});
response.write("<h1>Hello World</h1>");
response.end();
}
}).listen(1334);
var io = require('socket.io').listen(app);
function NewMessageNotify(receiverid){
io.sockets.emit("notifications_"+receiverid,{ data_type: "message" });
}
你是如何發送消息:
然後將數據發送給特定的用戶?我們可以看到這些代碼嗎?我認爲你會認證一個連接用戶,然後跟蹤哪個socket.id連接到哪個認證的人。然後,當你想發送一條消息給那個人時,你只會將它發送給被認證爲他們的套接字。您在技術上爲每個用戶使用自定義消息名稱的方案允許任何人收聽所有消息。 – jfriend00 2014-09-29 21:20:49
如果您想充分利用StackOverflow,請在發佈您的問題20-30分鐘之內回來查看人們是否需要一些幫助來理解您的問題。絕大多數可能會幫助你的人會在頭30-60分鐘看到你的問題。如果它不完全清楚,而且你沒有回答被問到的問題,那麼人們就會繼續前進,你會錯過幫助。這個地方不像24小時後發佈和回來的典型論壇。如果你的問題不清楚,它會在那之前關閉。 – jfriend00 2014-09-29 22:31:26
你好。我,m使用php寫入節點服務器。我也發送某種密碼,服務器只有在「密碼」匹配的情況下才會通知用戶。這樣我可以避免不必要的發佈。 – SocialDub 2014-09-29 22:45:54