159 votes

Définir l'en-tête HTTP pour une requête

J'ai une requête particulière dans mon application qui nécessite une authentification de base, j'ai donc besoin de définir l'en-tête Authorization pour cette requête. J'ai lu à propos de la définition des en-têtes de requête HTTP mais, d'après ce que je sais, il définira cet en-tête pour toutes les requêtes de cette méthode. J'ai quelque chose comme ça dans mon code :

$http.defaults.headers.post.Authorization = "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==";

Mais je ne veux pas que toutes mes demandes d'affichage envoient cet en-tête. Existe-t-il un moyen d'envoyer l'en-tête uniquement pour la requête que je souhaite ? Ou dois-je l'enlever après ma requête ?

0 votes

321voto

Yunchi Points 2330

Il y a un paramètre d'en-tête dans l'objet de configuration que vous passez à $http pour les en-têtes par appel :

$http({method: 'GET', url: 'www.google.com/someapi', headers: {
    'Authorization': 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='}
});

Ou avec la méthode des raccourcis :

$http.get('www.google.com/someapi', {
    headers: {'Authorization': 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='}
});

La liste des paramètres valides est disponible dans la rubrique $http la documentation sur les services.

1 votes

Je pense que j'aurais dû regarder la documentation d'un peu plus près... J'essayais juste d'utiliser les méthodes de raccourci. Cela fonctionne très bien. Je vous remercie.

17 votes

@dnc253 Cela fonctionne aussi avec les méthodes de raccourci. Le code serait $http.get('www.google.com/someapi', {headers: {'Authorization': 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='}});

1 votes

Existe-t-il un moyen d'étendre $http (tout en maintenant l'"injectabilité" et en n'ayant pas à l'appliquer à la collection d'en-têtes par défaut) pour qu'il ajoute automatiquement cet en-tête pour vous ? Cela semble un peu redondant de devoir ajouter l'en-tête pour chaque appel sécurisé que l'on fait.

20voto

donny Points 399

Essayez ceci, cela fonctionnera peut-être ;)

.factory('authInterceptor', function($location, $q, $window) {

return {
    request: function(config) {
      config.headers = config.headers || {};

      config.headers.Authorization = 'xxxx-xxxx';

      return config;
    }
  };
})

.config(function($httpProvider) {
  $httpProvider.interceptors.push('authInterceptor');
})

Et assurez-vous que votre back-end fonctionne également, essayez ceci. J'utilise RESTful CodeIgniter.

class App extends REST_Controller {
    var $authorization = null;

    public function __construct()
    {
        parent::__construct();
        header('Access-Control-Allow-Origin: *');
        header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Authorization");
        header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
        if ( "OPTIONS" === $_SERVER['REQUEST_METHOD'] ) {
            die();
        }

        if(!$this->input->get_request_header('Authorization')){
            $this->response(null, 400);    
        }

        $this->authorization = $this->input->get_request_header('Authorization');
    }

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X