Node.js + Socket.io | Установить пользовательские заголовки на сервере

Я использую Helmet with Express, чтобы установить некоторые заголовки безопасности HTTP со стороны сервера. Это хорошо сделано при рендеринге клиентских страниц поверх приложения node.js, используя:

var app = express();
app.use(helmet());
..
res.render("pages/index", data);

Все ресурсы на странице индекса будут иметь заголовки шлема. К сожалению, socket.io имеет собственное управление заголовками. Таким образом, все, что идет после /socket.io/, будет иметь небезопасные / собственные заголовки. Например здесь:

<https_path>/socket.io/socket.io.js
<https_path>/socket.io/?EIO=3&transport=polling&t=Lj4CFnj&sid=ILskOFWbHUaU6grTAAAA

Поэтому я хочу установить пользовательские заголовки для всех элементов socket.io вручную.

Вот как мне требуется socket.io (только выдержка):

/src/app.js

var express = require("express");
var sio = require("socket.io");
var app = express();
var io = require("./../lib/io.js").initialize(app.listen(REST_PORT, () => {
    logger.info("Application ready on port " + REST_PORT + " . Environment: " + NODE_ENV);
}));

/lib/io.js

exports = module.exports = {};
var sio = require("socket.io");
exports.initialize = function(server) {
    var options = {
        cookie: false,
        extraHeaders: {
        "X-Custom-Header-For-My-Project": "Custom stuff",
        }
    };
    io = sio(server, options);
    io.on("connection", function(socket) {
    // logic
)};

Опция "extraHeaders" не работает, я думаю, что это возможно только с socket.io-client. Я много гуглял, но не удача.

Также посмотрел вокруг, как использовать socket.request (очевидно, он помогает с заголовками, согласно: здесь), но я также не мог понять это.

Не могли бы вы, ребята, помочь?

0 ответов

Параметры extraHeaders будут работать, как показано ниже, так как вам нужно удалить "transports: ['polling']", если вы используете, и использовать шаблон ниже. Это сработало для меня, и я мог отправлять собственные заголовки.

используемый пакет:- "socket.io-client": "^2.2.0",

this.socket = io(environment.host, {
   path: `/api/backend/socket.io`,
   origins: '*:*',
   // transports: ['polling'],
   transportOptions: {
     polling: {
        extraHeaders: {
           'authorization': token,
           'user-id' : userId
        }
     }
    }
 })

Ссылка: - https://socket.io/docs/client-api/

Другие вопросы по тегам