Wie schreibe ich einen Angular 2-Dienst mit CORS in Ionic?

Ich habe Probleme, meinen Angular 1-JavaScript-Dienst mithilfe von http auf einen Angular 2-TypeScript-Dienst zu verschieben, um eine CORS-Anfrage zu stellen (dies verwendet Ionic Version 2). In Angular 1 mache ich so etwas.

angular.module('app.services',[])
.factory('LoginService', ['$http', function($http) { 
 var service = {};

 service.isUserLoggedIn = function() {
  var restUrl = 'http://10.10.10.25:8080/api/user/isloggedin';
  var options = {
   method: 'GET', url: restUrl, withCredentials: true,
   headers: { 
    'x-request-with': 'XMLHttpRequest', 
    'x-access-token': 'sometoken' 
   }
  };
  return $http(options);
 };

 return service;
}])

In Angular 2 mit TypeScript hat sich einiges geändert (Promises / Observables). Mein bisheriger Versuch sieht wie folgt aus.

import { Injectable } from '@angular/core';
import { Headers, Http, Response, RequestMethod, RequestOptionsArgs } from '@angular/http';
import { Observable } from 'rxjs/Observable';

@Injectable()
export class LoginService {
  constructor(private _http:Http) {

  }

  isLoggedIn():boolean {
    var r:any;
    var e:any;
    let url = 'http://10.10.10.25:8080/api/user/isloggedin';
    let options:RequestOptionsArgs = {
      url: url,
      method: RequestMethod.Get,
      search: null,
      headers: new Headers({
        'Content-Type': 'application/json',
        'X-Requested-With': 'XMLHttpRequest',
        'x-access-token' : 'sometoken'
      }),
      body: null
    };
    this._http.get(url, options).map(this.extractData).catch(this.handleError)
      .subscribe(
       response => { r = <any>response; console.log(r); }, 
       error => { e = <any>error; console.log(e); });
    return false;
  }

  private extractData(response:Response) {
    let body = response.json();
    return body.data || { };
  }

  private handleError(error:any) {
    let errMsg = (error.message) ? error.message :
      error.status ? `${error.status} - ${error.statusText}` : 'Server error';
    console.log('error = ' + errMsg);
    return Observable.throw(errMsg);
  }
}

ch bin mir nicht mehr sicher, wie ich in Angular 2 das ansprechen soll, was ich in Angular 1 hatt

withCredentials (beachten Sie, dasshttps: //angular.io/docs/js/latest/api/http/index/RequestOptionsArgs-interface.html#! # withCredentials-anchor sagt dasRequestOptionsArgs sollte ein Feld @ habwithCredentials, aber ich erhalte eine Fehlermeldung im IDE Visual Studio-Code, die besagt, dass er nicht in der Schnittstelle vorhanden ist. ionic verwendet wahrscheinlich eine ältere eckige 2 version?)header (x-request-with und x-access-token)die eigentliche Antwort

Ich habe ein bisschen mehr gesucht und konnte verstehen, wie man Header einfügt und das Abonnement richtig handhabt. Die withCredentials sind jedoch immer noch ein Problem.

Ich fand diesen SO Beitrag angular2 xhrfields withcredentials true und änderte meinen Konstruktor wie folgt. Es funktioniert jetzt

constructor(@Inject(Http) private _http:Http) {
    let _build = (<any> _http)._backend._browserXHR.build;
    (<any> _http)._backend._browserXHR.build = () => {
      let _xhr = _build();
      _xhr.withCredentails = true;
      return _xhr;
    }
  }

Antworten auf die Frage(2)

Ihre Antwort auf die Frage