2016-06-16 9 views
0

Ich denke, dass ich mit einigen grundlegenden Sache beschäftigen, aber trotz, dass ich nicht in der Lage, das allein zu lösen.Wie Token zu jeder Anfrage in jedem Controller-Angular hinzufügen

In Angular Documentation Ich foundout Option wie Header für jede Anfrage festlegen. Es sollte so etwas wie sein:

module.run(function($http) { 
    $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w'; 
}); 

Dies sieht aus, wenn Sie Token von Start wie in diesem Beispiel kennen. Aber ich erhalte Benutzer-Token nach dem Login.

Also versuche ich, so etwas wie:

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; 
    }); 
} 

Dies nun hinzugefügt Authorization Header jeder Anfrage aber nur innerhalb von LoginCtrl. Wenn ich in irgendeinem anderen Controller Anfrage ohne diesen Header mache.

Sobald ich andere $ HTTP-Anfrage in anderen Controllern erstellen, brauche ich es dort arbeiten. Gibt es eine nette Möglichkeit, es für jeden Controller einzustellen oder muss ich es beim Laden jedes Controllers von cookie setzen?

Antwort

2

Angular bietet Ihnen interceptors, die jeden $ http-Aufruf von Ihrer Anwendung manipulieren können. Schauen Sie sich diese documentation an.

Beispiel

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

Zuerst müssen Sie für jeden Controller

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 
]); 

oder Sie können Abfangjäger verwenden Dienste erstellen.

Verwandte Themen