如何在nodejs中使用不记名令牌实现socket.io身份验证

How to implement socket.io authentication with bearer token in nodejs

如何验证传入连接, 如何创建私有命名空间, 在向客户端发出任何事件之前如何验证每个套接字的客户端角色

您可以将 "authorization" 设置为您的套接字连接。客户端通过握手数据的查询发送身份验证令牌 parameter.Which 然后我使用 socketAuth 方法进行验证。查看下面的代码示例,如果有帮助请告诉我

/**
 * Check authorization Here
 */
ioSocket.set('authorization', function (handshakeData, callback) {
    console.log("Inside Auth Handshake");
    console.log(handshakeData._query);

    if (handshakeData._query && handshakeData._query.token) {
        var token = handshakeData._query.token;
        socketAuth(token, function (err, res) {
            if (err) {
                console.log(err);
                console.log("** Socket Authentication Done :" + false);
                return callback(null, false);
            } else {
                console.log(" *** Socket Authentication Done :" + res);
                return callback(null, res);
            }
        });
    } else {
        console.log("*Socket Authentication connection: false , Done :" + false);
        return callback(null, false);
    }

});

socketAuth = function (token, callback) {
    verifyToken(token, function (err, res) {  // method to get the user of this token from the DB and validate the connection.
        if (err) {
            return callback(true, false);
        } else {
            return callback(null, res);
        }
    });
}

如何使用授权令牌连接到套接字的客户端示例。

var socket = require('socket.io-client')('<SERVER IP>/?token=9a05f8279436549875d1c2cd');

socket.on('connect', function () { console.log("socket connected"); });
socket.emit('event_name',{"message":"hello"});