Erreur Socket.io, NodeJS et ReactJS CORS

Oct 06 2020

Pour commencer, j'ai lu un tas de questions concernant le même problème.

Lorsque j'ouvre la connexion avec le socket via le client React de la manière normale, juste l'URL en tant que paramètre, je n'obtiens pas cette erreur, connexion établie.

Mais quand je fais ça:

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

La demande renvoie une erreur CORS à chaque fois.

J'ai essayé de:

  • Définissez l'origine comme ceci: 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 ();}) ;

  • Et aussi ceci:

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

Aucun des éléments ci-dessus n'a fonctionné.

J'apprécierais toute aide.

Réponses

Rodolfo Oct 07 2020 at 12:37

J'ai trouvé la réponse!

Pour toute personne ayant le même problème, voici comment je l'ai fait:

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();
  }
});