节点js socket.io需要验证请求和服务器响应

时间:2018-12-27 05:03:34

标签: node.js socket.io

我有一个简单的应用程序可以为客户传输股票市场价格。我有一个源实时存货费率,我需要推送给所有客户。我已经编写了laravel api来读取源费率并将其存储到Redis数据库中,并且一旦从源端收到新的费率,便会将Redis更改推送到事件,以便我可以推送通过套接字io向客户端更改速率。 我的套接字io代码是

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var Redis = require('ioredis');
var redis = new Redis({ port: 6379 } );

    redis.subscribe('mcxratesupdate', function(err, count) {
        console.log('redis connected');
    });

    redis.on('pmessage', function(subscribed, channel, data) {
        data = JSON.parse(data);
        //console.log(data);
        io.emit(channel + ':' + data.event, data.data);
    });
redis.on('message', function(channel, message) {
    //console.log('Message Recieved: ' + message);
    message = JSON.parse(message);
    io.emit(channel + ':' + message.event, message.data);
});

http.listen(3002, function(){
    console.log('Listening on Port 3002');
});

此代码很简单,因为只要有谁在下面的代码中连接客户端,它将服务器连接到所有客户端。

<script src="socket.io.js"></script>
<script type="text/javascript">
    var socket = io('http://server:3002/');
    socket.on("mcxratesupdate:App\\Events\\MCXRateUpdates", function(data){
        console.log(data);
    });
</script>

但是我必须验证请求,并且只需要对我的有效客户进行响应。是否有可能像验证来自域数组的请求并仅为有效客户端建立连接并将数据流式传输到它们那样? 我尝试读取请求标头,但我无法做到这一点,请任何人都可以帮忙。

1 个答案:

答案 0 :(得分:0)

有很多可用的身份验证库,JWT是我的最爱。客户端发送请求时,您需要在标头中传递身份验证令牌。服务器收到请求后,您可以使用中间件并检查请求是否来自有效用户。