我有一个rest API,它具有使用用户名和密码(123:123)进行的基本身份验证,而我正在运行的代码在js控制台中显示未授权。如何在功能中添加基本身份验证,以便可以像此代码一样被授权

 headers: {'Authorization': 'Basic ' + btoa("xxx:yyy")},


我的代码

   <body>

        <div ng-app="myApp" ng-controller="customersCtrl">

            <table>
                <tr ng-repeat="x in names">
                    <td>{{ x.name }}</td>
                    <td>{{ x.city }}</td>

                </tr>
            </table>

        </div>

        <script>
    var app = angular.module('myApp', []);
    app.controller('customersCtrl', function($scope, $http) {

        $http.get("https://example.com/name/data/1")

        .then(function (response) {$scope.names = response.data.records;});
    });
        </script>

    </body>

最佳答案

您可以在用户登录后设置默认的授权标头。并在用户注销时清理它。

       $http.defaults.headers.common['Authorization'] = 'Basic ' + login + ':' +    password);


您可以使用几种方法定义工厂服务来管理登录状态。

.factory('AuthenticationService', function($q, $http) {

    var loggedIn = false;

    var service = {
        login: function(credentials) {

            var def = $q.defer();
            $http.post('loginURL')

            .then(
                function(response) {
                    $http.defaults.headers.common.Authorization = response.header;
                    loggedIn = true;
                },
                function(response) {
                    return def.reject(response);
                }
            );
            return def.promise
        },

        isLoggedIn: function() {
            return loggedIn;
        },

        logout: function() {
            loggedIn = false;
            delete $http.defaults.headers.common.Authorization;
        }
    };

    return service;
})


例如,在您的控制器中,您可以使用AuthenticationService.isLoggedIn()来检查是否已记录用户。

09-25 21:44