2016-08-11 13 views
0

ロングストーリーショート。私は本当にAngularJSの教祖ではありません。私たちのサイトは1.3から1.5にアップグレードされました。この1つは壊れています。AngularJS 1.3から1.5 transformRequestが壊れた、特定の状況のた​​めの解決策?

私たちは、「API」という名前の工場でtransformRequestを経由してHTTPヘッダーを注入するために使用:あなたのよう

.service('auth', function($cookies, $rootScope, api) { 
    this.user = null; 
    this.login = function(credentials) { 
     var log = api.auth.login(credentials); 
     log.$promise.then(function(data){ 
      // on good username and password 
      this.user = data; 
     }); 

.factory('api', function($resource) { 
    function add_auth_header(data, headersGetter) { 
     var headers = headersGetter(); 
     headers['Authorization'] = ('Basic ' + btoa(data.username + 
       ':' + data.password)); 
    } 
    // defining the endpoints. 
    return { 
     auth: $resource('/api/v1/auth/', {}, { 
      login: {method: 'POST', transformRequest: add_auth_header}, 
      logout: {method: 'DELETE'}, 
     }), 

後で同じファイルで、これはそのように呼ばれていますapi.auth.loginを信任状で呼び出します。私は変換要求が呼び出されていることを確認しました。ヘッダーはheadersGetter()によって正しくフェッチされており、ヘッダー[]オブジェクトをハングすることはもはや1.3で使用したように変更されません。 Fiddlerは、1.3で行ったように要求にAuthorizationヘッダーがなくなったことを確認し、要求を受け取ったDjangoサーバーも同意します。

1.4でtransformRequestの機能が「壊れました」と読んだことがありますが、これらの投稿はいつも$ httpリクエストを作成し、工場からapiサービスを提供していないこと、私のようなAngularJS newbにはかなりの意味がありました。私は認可がどのように注入されるのかをどこから変更するのか分かりません。

誰でも私に正しい方法を教えてもらえますか?

+0

真剣に、なぜdownvoteのコメントはありませんか?これはまったく正当な質問です。 –

答えて

0

他の誰もこれに直面している場合は、1.4の変更履歴の変更が壊れていました。

私はその修正が自分のために話すと感じます。関数add_auth_headerは呼び出されずに渡されることに注意してください。

.factory('api', function($resource) { 
    function add_auth_header(data) { 
     // as per HTTP authentication spec [1], credentials must be 
     // encoded in base64. Lets use window.btoa [2] 
     return 'Basic ' + btoa(data.data.username + ':' + data.data.password); 
    } 
    // defining the endpoints. 
    return { 
     auth: $resource('/api/v1/auth/', {}, { 
      login: {method: 'POST', headers: { 'Authorization': add_auth_header  }}, 
      logout: {method: 'DELETE'}, 
     }), 
関連する問題