Socket.io, NodeJS und ReactJS CORS Fehler

Oct 06 2020

Als Anfänger habe ich eine Reihe von Fragen zu demselben Thema gelesen.

Wenn ich die Verbindung mit dem Socket über den React-Client auf normale Weise öffne, nur die URL als Parameter, wird dieser Fehler nicht angezeigt, die Verbindung wurde hergestellt.

Aber wenn ich das mache:

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

Die Anforderung gibt jedes Mal einen CORS-Fehler zurück.

Ich habe versucht:

  • Stellen Sie den Ursprung so ein: io.origins(['*:*']);

  • app.use (Funktion (req, res, next) {res.setHeader ("Zugriffskontrolle-Zulassen-Ursprung", req.header ("Ursprung") || req.header ("x-weitergeleiteter-Host") | | req.header ("referer") || req.header ("host")); res.header ("Zugriffssteuerungs-Zulassungsmethoden", "GET, POST, OPTIONS, PUT, PATCH, DELETE"); res.header ("Access-Control-Allow-Header", "X-Requested-With, Inhaltstyp"); res.setHeader ("Access-Control-Allow-Credentials", false); next ();}) ;;

  • Und auch das:

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

Keines der oben genannten hat funktioniert.

Ich würde mich über jede Hilfe freuen.

Antworten

Rodolfo Oct 07 2020 at 12:37

Hab die Antwort gefunden!

Für alle mit dem gleichen Problem habe ich es so gemacht:

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