web-dev-qa-db-fra.com

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

J'ai une requête particulière dans mon application qui requiert une authentification de base. Je dois donc définir l'en-tête Authorization pour cette requête. J'ai lu à propos de définition des en-têtes de requête HTTP , mais d'après ce que je peux dire, il définira cet en-tête pour toutes les demandes 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 chacune de mes publications demande d'envoyer cet en-tête. Est-il possible d'envoyer l'en-tête uniquement pour la requête que je veux? Ou dois-je l'enlever après ma demande?

157
dnc253

Il y a un paramètre d'en-tête dans l'objet config que vous transmettez à $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 de raccourci:

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

La liste des paramètres valides est disponible dans la documentation de service $ http .

315
Yunchi

Essayez ceci, peut-être que ça marche;)

.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 dos fonctionne aussi, essayez ceci. J'utilise CodeIgniter RESTful.

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

}
20
donny