我想知道这是否是正确的方法来保护socket.io房间。目前,这些是我为确保用户最终进入私人房间所采取的步骤,现在我需要确保用户在加入之前获得身份验证。
socket.io
并传递他想要加入的房间来连接到我的io.connect
服务器。socket_write
向我的服务器发送一个json_encoded
对象,该对象包含一个数据属性以及将该数据发送到的房间。socket.on
接收数据,并将数据发送到客户端正在侦听的给定房间。我的客户代码:
var socket = io.connect('http://localhost:8000');
socket.on('connect', function() {
socket.emit('room', window.location.href);
});
服务器:
const server = net.createServer((socket) => {
// The event that fires on PHP's socket_write.
socket.on('data', (msg) => {
const data = JSON.parse(msg);
io.sockets.in(data.room).emit('log', data.html.toString().trim());
});
}).listen(5600);
我服务器的on
连接事件:
io.on('connection', function (socket) {
// A client will trigger this event and pass their window.location.href(room) as room identifier.
socket.on('room', function(room) {
socket.join(room);
});
});
我如何写入socket.io服务器:
$data = [
'html' => 'test',
'room' => 'http://app.dev/stephan-v/app-test'
];
$json = json_encode($data);
socket_write($this->socket, $json, strlen($json));
这是我对私有websocket消息的实现,但当然这不安全。如果有人知道这个房间的名字,那个人就可以轻松收听发出的消息。
由于socket.join
只能在我的服务器上进行,我想当时认证的唯一地方是?
因此,我想我也应该传递数据来验证用户,而不是简单地传递房间。那时从我的node
服务器发出一个AJAX请求到我的PHP
后端?
显然我不想通过网络发送普通密码和用户名,所以我一直在阅读JSON网络令牌。我想你需要:
node
服务器(以及我正在加入的加入空间)。node.js
服务器发出AJAX请求到我的PHP
后端。很抱歉很长的帖子但是这里涉及很多组件,所以我希望有人可以确认这个工作流程,也许会给我一些提示/指示。
我宁愿不安装像Redis这样的东西,因为虽然它是前端/后端之间的一个很好的桥梁,但现在感觉像是矫枉过正,我想在更基本的层面上理解这一点。