我有一个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()来检查是否已记录用户。