web-dev-qa-db-fra.com

Ajouter l'authentification de base HTTP à cet HTTP GET dans angularjs

J'ai un code angularjs existant qui fait un HTTP GET. Vous trouverez ci-dessous un code pertinent à l'intérieur du contrôleur.

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

Je voudrais ajouter l'authentification de base HTTP à HTTP GET. Le nom d'utilisateur est foo et le mot de passe est bar. Comment cela peut-il être fait?

9
user781486

Parce que dans l'authentification de base, le nom d'utilisateur et le mot de passe sont décodés par base64. Vous devez d'abord trouver une bibliothèque pour faire ce travail à l'aise.

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

Après cela, chargez base64 dans votre application et en-têtes de configuration.

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

Vous pouvez également fournir l'en-tête d'authentification à la fonction get séparément si vous le souhaitez.

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

Plutôt que d'utiliser une bibliothèque pour encoder votre authentification en base 64, vous pouvez simplement utiliser:

window.btoa("user:pass")

il est pris en charge par la plupart des navigateurs.

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

14
ryan.wise