Saltar al contenido

Manejo de problemas de CORS en Ionic

Esta es el arreglo más correcta que encomtrarás compartir, pero primero obsérvala detenidamente y analiza si se adapta a tu trabajo.

Solución:

Al desarrollar localmente utilizando ionic serve o ionic run/emulate -l -c con livereload habilitado, ionic crea un servidor de desarrollo local en el puerto 8100 de forma predeterminada (http://localhost:8100/ ). los origin en este caso es localhost:8100 que cuando contacta a un servicio externo a través de HTTP con CORS habilitado, considera que la solicitud no es confiable y, por lo tanto, la rechaza.

Como lo sugieren los mismos Ionic (http://blog.ionic.io/handling-cors-issues-in-ionic/), puede crear un alias de proxy dentro de la aplicación Ionic para enrutar las llamadas API, evitando el origin problema en conjunto, sin embargo, su guía era específica para Ionic 1, por lo que aquí hay una actualización para Ionic v2.

Creando un Proxy en Ionic v2

Abierto ionic.config.json y agrega lo siguiente proxies configuración.


  "name": "project-name",
  "app_id": "xyz-projectid",
  "v2": true,
  "typescript": true,
  "proxies": [
    "path": "/api",
    "proxyUrl": "https://the-real-api-host.com"
  ]

En este caso, estamos creando una ruta dentro de la aplicación iónica en /api que reenviará las solicitudes al punto final https://the-real-api-host.com . Si quisiera usar un punto final de API diferente, por ejemplo http://my-custom-api.com/api/v2/ podrías insertarlo en proxyUrl en lugar de.

Actualización de referencias al punto final de la API

En el código de su aplicación, ahora debe actualizar todas las referencias de la URL base para el extremo de la API en https://the-real-api-host.com con /api . una llamada a /api debe ser detectado cuando está en el servicio Ionic y enviado a la dirección real.

La implementación de cada proyecto puede variar. En mi caso, no tenía el control de la API, ya que era un servicio externo, por lo que no podía controlar el manejo/respuestas de CORS yo mismo.

Nota: recuerda reiniciar el servidor (ionic serve) o obtendrá 404 de su llamada a la API porque aún no será proxy.

La creación de proxy solo funciona cuando ejecuta Ionic en su navegador usando ionic -serve. El problema de CORS sigue siendo un problema cuando se ejecuta en su dispositivo, especialmente en iOS con WKWebView.

En esos casos, puede usar el complemento HTTP nativo de Cordova.

Ver aquí para más detalles:

https://hackernoon.com/a-practical-solution-for-cors-cross-origin-resource-sharing-issues-in-ionic-3-and-cordova-2112fc282664

Si no tiene forma de cambiar la configuración del servidor, debe usar el complemento nativo Http para realizar solicitudes Http desde su dispositivo móvil, para evitar problemas de cors. Sin embargo, en el entorno web aún necesita usar HtttClient de Angular. Afortunadamente, con la biblioteca ionic-native-http-connection-backend puede usar el mismo servicio HttpClient para ambos entornos, y Http native se usará internamente si la aplicación se ejecuta desde un dispositivo móvil. Es una especie de envoltorio.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *