9

Ho un codice angularjs esistente che rende HTTP GET. Estratto di seguito è riportato un codice rilevante all'interno del controller.Aggiungere l'autenticazione di base HTTP a questo HTTP GET in angularjs

.controller('imptViewCtrl', ['$scope', '$http', 
     function ($scope, $http,) { 
        var url = $configuration.webroot + '/impt/list?list=testlist'; 
        $http.get(url).then(function (response) { 
           tableData = response.data; 
           }); 
     }]); 

Vorrei aggiungere l'autenticazione di base HTTP a HTTP GET. Il nome utente è foo e la password è bar. Come si può fare?

+1

Forse questo potrebbe aiutare: http://stackoverflow.com/questions/18877715/http-auth-headers-in-angularjs? – ssougnez

risposta

18

Perché nell'autenticazione di base, il nome utente e la password sono decodificati da base64. Devi trovare una biblioteca per fare questo lavoro per prima cosa comoda.

https://github.com/ninjatronic/angular-base64

Dopo di che, carico base64 nella vostra applicazione e di configurazione intestazioni.

angular 
    .module('myApp', ['base64']) 
    .config(function($httpProvider, $base64) { 
     var auth = $base64.encode("foo:bar"); 
     $httpProvider.defaults.headers.common['Authorization'] = 'Basic ' + auth; 
    }) 

Si può anche fornire l'intestazione di autenticazione per get funzione seprately, se volete.

var auth = $base64.encode("foo:bar"), 
    headers = {"Authorization": "Basic " + auth}; 
$http.get(url, {headers: headers}).then(function (response) { 
+0

Il tuo codice sembra ok ma ho difficoltà a farlo funzionare. Ho fatto un'altra domanda https://stackoverflow.com/questions/34429313/what-is-wrong-with-this-http-get-basic-authentication-code – user781486

+0

Il tuo codice funziona. Penso che sia il mio server a dare il problema. Contrassegnato come risposta corretta. – user781486

+0

Perché hai bisogno di una libreria per fare base64? perché non usare btoa() https://www.w3schools.com/jsref/met_win_btoa.asp? – splintor

9

Invece di utilizzare una libreria per codificare l'auth dalla base 64, si potrebbe utilizzare:

window.btoa("user:pass")

è supportato dalla maggior parte dei browser.

https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/btoa

+0

Che dire di post, put, delete, et. al.? – DRaehal

+2

@DRaehal il modo in cui si autentica una richiesta non dipende dal verbo HTTP della richiesta. Se l'endpoint di destinazione richiede l'autenticazione di base, devi solo applicare quell'intestazione, che si tratti di un POST, PUT, ecc. – superjos