2016-06-16 17 views
0

私は基本的なことをいくつか扱いますが、これだけでは解決できないと思います。各コントローラの各リクエストにトークンを追加する方法 - 角度

Angular Documentation各リクエストごとにヘッダーを設定する方法を知りました。

これは、この例のように開始からのトークンが分かっているようです。しかし、私は彼がログインした後にユーザートークンを取得します。

だから私のようなものしてみてください:

login: function(email, password) { 
    var data = {'userName':email, 'password': password}; 
    $http.post('api/v1/users/login.php', data).then(function (res) { 
     $cookies.put('user', res.data); 
     $http.defaults.headers.common.Authorization = 'Bearer '+res.data.token; 
    }); 
} 

これは今、それぞれの要求にちょうどLoginCtrlの内側Authorizationヘッダを追加しました。もし私が他のコントローラでこのヘッダーのないリクエストをしたら。

他のコントローラで他の$ httpリクエストを作成すると、すぐにそこで動作する必要があります。どのように各コントローラのためにそれを設定するか、またはクッキーから各コントローラの負荷でそれを設定する必要がある良い方法がありますか?

答えて

2

Angularは、アプリケーションから$ httpコールを操作できるinterceptorsを提供します。 これを見てdocumentation

appName.config(["$httpProvider", ($httpProvider: ng.IHttpProvider) => { 
       $httpProvider.interceptors.push(() => { 

         return { 
          'request': (config) => { 

          //retrieving a token from localStorage for example 
           var token = localStorage.getItem("token"); 
           if (token) 
            config.headers["Authorization"] = "Bearer " + token; 

           return config; 
          }, 
          'responseError': (rejection) => { 

          } 
         } 
        } 
       ); 
      }]); 
0

まず、あなたはすべてのコントローラ

module.run(function($http, $rootScope, subHeaderService) { 
    subHeaderService.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w'; 
    //subHeaderService.auth= 'Basic YmVlcDpib29w'; you can use like this 
}); 

app.service('subHeaderService', function() { 
    return {}; 
}); 

app.controller('mainCtrl', ['$scope', 'subHeaderService', 
    //subHeaderService.auth  
    //call here 
]); 

のためのサービスを作成する必要があります。または、インターセプタを使用することができます。

関連する問題