2016-01-26 8 views
5

システムにログインしようとしています。角度1ではオプションが利用できない、angular2 xhrfields withcredentials true

withCredentials:true 

を設定する方法があった。しかし、私は今(beta.1)、angular2

export class LoginComponent { 
    constructor(public _router: Router, public http: Http,) { 

    } 


    onSubmit(event,username,password) { 
     this.creds = {'Email': '[email protected]','Password': '01010','RememberMe': true} 
     this.headers = new Headers(); 
     this.headers.append('Content-Type', 'application/json'); 

     this.http.post('http://xyz/api/Users/Login', {}, this.creds) 
       .subscribe(res => { 
        console.log(res.json().results); 

       }); 
    } 

} 

答えて

5

私の知る限りでは実用的なソリューションを見つけることができませんでした。

あなたはこのようなもので、それを回避する必要があります。

let _build = http._backend._browserXHR.build; 

http._backend._browserXHR.build =() => { 
    let _xhr = _build(); 
    _xhr.withCredentials = true; 
    return _xhr; 
}; 
+0

これはChromeとFirefoxで動作しますしかしサファリは失敗する。 – harikrish

+0

特にこれには当てはまりませんが、現在のベータ版(ベータ版)のSafari(国際化APIなど)にはまだ問題があります。 – cexbrayat

+0

あなたは私はあなたがこれは私が ヘッダ= { ヘッダ送りますものですAPIの WIH送っているヘッダ何知らせることができます:({ 「受け入れる]新しいヘッダを:「アプリケーション/ JSON」、 「Content-Typeの」: 'application/json' }) }; – harikrish

0

私はあなたがpostは正しい方法をmetrhod使用していないと思います。

onSubmit(event,username,password) { 
    this.creds = { 
    'Email': '[email protected]', 
    'Password': '01010','RememberMe': true 
    } 

    this.headers = new Headers(); 
    this.headers.append('Content-Type', 'application/json'); 

    this.http.post('http://xyz/api/Users/Login', 
       JSON.stringify(this.creds), 
       { headers: headers }); 
} 

パラメータを反転することができます。 2番目のパラメータは、POSTに送信するコンテンツに対応し、文字列として定義する必要があります。オブジェクトはこのレベルではまだサポートされていません。この問題はhttps://github.com/angular/angular/issues/6538を参照してください。

特定のヘッダーを設定する場合は、postメソッドの3番目のパラメータにHeadersオブジェクトを追加する必要があります。

それ以外の場合は、クロスドメイン要求内でCookieを送信する場合は、withCredentialsプロパティがCORSに関連していると思います。あなたはより多くの詳細については、このリンクを見てすることができます

はティエリー

2

は、この問題はで指摘されてきた 、それはあなたのお役に立てば幸いですangle2チーム

issue linkの後には、いくつかの他の回避策(特に@注射可能なもの)があります。

+0

リンク無効 – Azarus

+0

それは有効だった...まあ、それはリンクのライフサイクルです:( – grebett

+0

私は時間がたつにつれて消えるかもしれないので、ランダムにリンクを投稿するのは良い考えではありません。意味の内容を貼り付けるコピーは少なくとも行う必要があります:) – Azarus

1

誰でもcexbrayatの回答に基づいて、プレーンなJSを使用している場合:角度で

app.Service = ng.core 
    .Class({ 
     constructor: [ng.http.Http, function(Http) { 
      this.http = Http; 
      var _build = this.http._backend._browserXHR.build; 
      this.http._backend._browserXHR.build = function() { 
       var _xhr = _build(); 
       _xhr.withCredentials = true; 
       return _xhr; 
      }; 
     }], 
8

> 2.0.0(と実際のRC2から)、単に

http.get('http://my.domain.com/request', { withCredentials: true }) 
+0

私はこれを探して非常に長い時間を過ごした...ありがとう。 – ARM

+0

同様に、私はこの1つを試してみるのにかなりの時間を費やしました。 私が持っていた問題の1つは、問題の内容を実際に知りませんでした(または少なくともそれを追跡するのに時間がかかりました)。私が見たすべては、一見完全な要求に対して401の応答を得ていたということでした。 –