2017-10-14 5 views
1

Je me fais ce que je crois être un problème CORS dans la version iPhone Simulator SimulatorApp-829,6/Xcode 9.0ionique 3 problème CORS dans iPhone Simulator

J'ai construit une application ionic3 w/Cordova et peut fonctionner dans la navigateur utilisant un proxy. Mais quand je l'ai couru dans la sim ou sur mon téléphone, il ne s'authentifiera pas contre l'appel http distant.

J'ajouté débogueur Cordova et débogué à la console Xcode:

Ceci est l'objet d'erreur http:

{"_body":{"isTrusted":true},"status":0,"ok":false,"statusText":"","headers":{},"type":3,"url":null}

C'est le code que je exécution dans l'application ionique (travaux dans le navigateur)

let headers = new Headers(); 
 
    headers.append('Content-Type', 'application/json'); 
 
    headers.append('Authorization', 'Basic ' + this.base64Service.encode(id + ':' + pw)); 
 
    headers.append('Access-Control-Allow-Origin', '*'); 
 
    
 

 
    return this.http.get('http://myserver.com/api/v1/authenticate', {headers: headers}).map(res => res.json());

Je suis vraiment confus parce que deux choses:

1) J'ai le plugin installé et whitelist Cordova ont eu du succès avant contre le serveur distant. Je ne sais pas ce qui se passe

2) Si j'utilise Developer Safari> Simulator et se connecter à l'application en cours d'exécution dans le simulateur, il donne cette erreur:

Failed to load resource: Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin. 

XMLHttpRequest cannot load http://myserver.com/api/v1/authenticate. Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin. 

Comment pouvez-vous obtenir un problème CORS dans le Sim ou dispositif réel? Je pense que les ressources étaient toutes basées sur des fichiers: //. Aussi, pourquoi le plugin de liste blanche Cordova ne s'occuperait-il pas du problème?

Merci d'avance. J'ai passé beaucoup d'heures là-dessus.

Répondre

0

J'ai récemment rencontré un problème similaire. Mon application ionique fonctionnait sans problème depuis des mois et j'ai soudainement commencé à recevoir des erreurs CORS sur iOS. Le problème était que je suis passé à WKWebViewUIWebview. Explique plus à propos de WKWebView et pourquoi il est beaucoup mieux que son prédécesseur.

Il mentionne également ce CORS concernant:

UIWebview, or the older webview in iOS, never actually enforced CORS, but WKWebView does and does not provide a way to disable it. To address this, you need to implement CORS correctly and add the following entry:

Origin: http://localhost:8080

IF this is not possible (you do not own the API), a workaround can be to use the native HTTP plugin, @ionic-native/http.

Ainsi, les deux solutions sont:

  1. Si vous possédez l'api que vous utilisez, activez CORS sur elle
  2. Si vous pouvez » t modifier l'API, vous pouvez utiliser Ionic Native Http

Je suis allé avec le premier et e Tout a commencé à fonctionner correctement à nouveau.