我创建了一个社交网络,发展得非常好。我想使用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