Errore di Socket.io, NodeJS e ReactJS CORS

Oct 06 2020

Per cominciare, ho letto un mucchio di domande riguardanti lo stesso problema.

Quando apro la connessione con il socket tramite il client React nel modo normale, solo l'URL come parametro, non ottengo questo errore, connessione stabilita.

Ma quando lo faccio:

const io = ioClient(webSocketUrl, {
  transportOptions: {
    polling: {
      extraHeaders: getAuthenticationToken()
    }
  }
});

La richiesta restituisce ogni volta un errore CORS.

Ho provato a:

  • Imposta l'origine in questo modo: io.origins(['*:*']);

  • app.use (function (req, res, next) {res.setHeader ("Access-Control-Allow-Origin", req.header ("origin") || req.header ("x-forwarded-host") | | req.header ("referer") || req.header ("host")); res.header ("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, PATCH, DELETE"); res.header ("Access-Control-Allow-Headers", "X-Requested-With, content-type"); res.setHeader ("Access-Control-Allow-Credentials", false); next ();}) ;

  • E anche questo:

    app.use (cors ()); app.options ("*", cors ());

Nessuno dei precedenti ha funzionato.

Gradirei qualsiasi aiuto.

Risposte

Rodolfo Oct 07 2020 at 12:37

Trovato la risposta!

Per chiunque abbia lo stesso problema, ecco come l'ho fatto:

const io = require("socket.io")(server, {
  handlePreflightRequest: (req, res) => {
      const headers = {
          "Access-Control-Allow-Headers": "Content-Type, Authorization",
          "Access-Control-Allow-Origin": req.headers.origin, //or the specific origin you want to give access to,
          "Access-Control-Allow-Credentials": true
      };
      res.writeHead(200, headers);
      res.end();
  }
});