2013-08-23 10 views
9

Il 99% delle mie chiamate ajax richiede uno specifico "X-API-TOKEN" per l'autenticazione e la comunicazione con la mia API REST Rails. Ma sto anche facendo una chiamata a un'API di terze parti e continuo a ricevere un errore che dice "Il campo di intestazione della richiesta X-API-TOKEN non è consentito da Access-Control-Allow-Headers."Come rimuovere le intestazioni predefinite solo per richieste XHR specifiche in AngularJS?

Tutto funziona bene se delte l'intestazione a destra prima della chiamata, e un lavoro in giro sarebbe da eliminare e quindi aggiungere nuovamente dopo la chiamata, ma c'è un modo più semplice di così:

apiToken = $http.defaults.headers.common["X-API-TOKEN"] 
    delete $http.defaults.headers.common["X-API-TOKEN"] 

    $http(
     method: "GET" 
     url: 'http://...}}' 
    ).success((data, status, headers, config) -> 
    ).error (data, status, headers, config) -> 

    $http.defaults.headers.common["X-API-TOKEN"] = apiToken 

risposta

4

L'oggetto di configurazione del servizio $http consente di sovrascrivere l'invio dell'intestazione http per una richiesta specifica. Vedere la proprietà di configurazione headers.

Questo può richiedere un elenco di intestazioni o una funzione che restituisce un elenco di intestazioni. Quindi per la richiesta di intestazione non auth fai una copia delle intestazioni predefinite rimuovi l'intestazione che non richiedi e poi fai la richiesta. Puoi conservarlo per un uso successivo.

Vedi $httpdocumentation

+0

Questa soluzione è buona per supponiamo di avere una sola chiave, ma cosa succede se abbiamo più intestazioni personalizzate e avere più tali chiamate API esterna in cui non abbiamo bisogno queste intestazioni. Possiamo ottenere questo utilizzando transformRequest? –

13

Impostare l'intestazione voglia/intestazioni su undefined come questo, allora non influenzerà le impostazioni globali.

$http({ 
     method: 'GET', 
     url: 'someurl', 
     headers: { 
      'X-API-TOKEN': undefined 
     } 
     } 
    ) 
+1

indefinito è la via. Saluti Eduardo – SkyBlues87

Problemi correlati