Хороший способ проверки входящих сообщений в Socket.IO? - PullRequest
0 голосов
/ 02 июля 2018

Когда речь идет о приложениях Express, чтобы проверить содержимое тела (заголовки заказа или запрос), вы всегда можете создать промежуточное программное обеспечение для проверки, которое будет располагаться перед фактическим контроллером, а в случае неверных данных ответит с ошибкой. .

Socket.IO не поддерживает цепочку множественных обратных вызовов, как в Express, поэтому вы не можете использовать тот же подход.

Есть ли хороший способ проверить входящее сообщение в socket.IO, кроме списка if для проверки каждого поля в обработчике?

Ответы [ 3 ]

0 голосов
/ 02 июля 2018

Вы можете использовать SocketioJWT:

var io            = require("socket.io")(server);
    var socketioJwt   = require("socketio-jwt");

    //// With socket.io < 1.0 ////
    io.set('authorization', socketioJwt.authorize({
      secret: 'your secret or public key',
      handshake: true
    }));
    //////////////////////////////

    //// With socket.io >= 1.0 ////
    io.use(socketioJwt.authorize({
      secret: 'your secret or public key',
      handshake: true
    }));
    ///////////////////////////////

    io.on('connection', function (socket) {
      // in socket.io < 1.0
      console.log('hello!', socket.handshake.decoded_token.name);

      // in socket.io 1.0
      console.log('hello! ', socket.decoded_token.name);
    })

Дополнительные параметры проверки см. В auth0 / jsonwebtoken .

0 голосов
/ 10 октября 2018

Это функция, которая выполняется для каждого входящего сокета и получает в качестве параметров сокет и функцию, которая может дополнительно отложить выполнение до следующего зарегистрированного промежуточного программного обеспечения.

io.use((socket, next) => {
if (socket.request.headers.cookie) return next();
next(new Error('Authentication error'));
});

Надеюсь, это решит Вашу проблему.

0 голосов
/ 02 июля 2018

Теперь вы можете использовать socket.use() в последней версии socket.io, как промежуточное ПО в nodejs

io.on('connection', (socket) => {
  socket.use((packet, next) => {
    if (packet.doge === true) return next();
    next(new Error('validation error'));
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...