Bir istek için HTTP üstbilgisi ayarlama


159

Uygulamamda Temel kimlik doğrulaması gerektiren belirli bir isteğim var, bu nedenle bu istek için Yetkilendirme başlığını ayarlamam gerekiyor. HTTP istek başlıklarını ayarlama hakkında okudum , ancak söyleyebileceğimden, bu yöntemin tüm istekleri için bu başlığı ayarlayacaktır. Benim kodda böyle bir şey var:

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

Ancak posta isteklerimin her birinin bu başlığı göndermesini istemiyorum. Yalnızca istediğim tek bir istek için üstbilgi göndermenin bir yolu var mı? Yoksa isteğimden sonra kaldırmak zorunda mıyım?


Yanıtlar:


320

Konfigürasyon nesnesinde, $httparama başına üstbilgiler için ilettiğiniz bir headers parametresi var :

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

Veya kısayol yöntemiyle:

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

Geçerli parametrelerin listesi $ http servis belgelerinde mevcuttur.


1
Sanırım dokümana biraz daha yakından bakmalıydım ... Sadece kısayol yöntemlerini kullanmaya çalışıyordum. Harika çalışıyor. Teşekkürler.
dnc253

17
@ dnc253 Bu, kısayol yöntemleriyle de çalışır. Kod şöyle olurdu$http.get('www.google.com/someapi', {headers: {'Authorization': 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='}});
Yunchi

1
Bu başlığı sizin için otomatik olarak eklemek üzere $ http'yi genişletmenin ("enjekte edilebilirliği korurken ve varsayılan başlık koleksiyonuna uygulamak zorunda kalmadan) bir yolu var mı? Yaptığınız her güvenli arama için her zaman başlık eklemek zorundasınız.
nokturnal

31
Benim için çalışmıyor. Bu şekilde eklediğim üstbilgilerin hiçbiri gerçek isteğe eklenmez.
mcv

4
Ben başlıklarını ayarlamak için denemek zaman, ricam bir şekilde söner OPTIONdolayısıyla benim uç nokta bir döner, Request 404 NOT FOUNDmantıklı olan: Sadece bir bilen GET /someResourcedeğilOPTIONS /someResource
Matheus Felipe

19

Bunu deneyin, belki işe yarıyor;)

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

Ve arka ucunuzun da çalıştığından emin olun, bunu deneyin. RESTful CodeIgniter kullanıyorum.

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

}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.