【发布时间】:2016-02-11 05:01:16
【问题描述】:
我正在为我的 API 使用 Django REST 令牌身份验证。
我发布了我的凭据以获取令牌端点。但是,当我尝试以正确的方式设置标头时,它会一直响应 http 401 错误。我使用curl -X GET http://127.0.0.1:8000/events/ -H 'Authorization: Token 4d92d36768ca5d555b59cf68899eceab39c23704 ' 尝试过它确实有效!这是我的代码:
app.controller('HomeController', ['$scope','$http', function($scope,$http) {
$scope.username = '';
$scope.password = '';
$scope.submitLogin = function () {
var credentials = {
username : $scope.username,
password : $scope.password,
};
var req = $http.post('http://127.0.0.1:8000/api-token-auth/', credentials);
req.success(function(data, status, headers, config) {
$scope.token = data.token;
var str1 = 'Token ';
$scope.tokenheader = str1.concat($scope.token);
$http.defaults.headers.common.Authorization = $scope.tokenheader;
});
req.error(function(data, status, headers, config) {
alert( "failure message: " + JSON.stringify({data: data}));
});
};
$scope.getEvents = function () {
var req = {
method: 'GET',
url: 'http://127.0.0.1:8000/events/',
}
$http(req).then(
function() {
console.log('succes')
},
function(){
console.log('fail')
});
};
}]);
还有 chrome 开发工具中的错误信息:
XMLHttpRequest cannot load http://127.0.0.1:8000/events/. Response for preflight has invalid HTTP status code 401
如何摆脱这个 401 错误?
编辑:我刚刚发现错误在于我的 API 上没有安装 CORS。我在 chrome 中使用了一个 CORS 插件,该插件适用于我的 api 的身份验证部分,但不适用于我的事件 url!
【问题讨论】:
-
真的在 submitLogin 上调用了
success回调吗?不推荐使用旧的 promise 方法success和error。 -
是的,他们正在工作。我得到了令牌,我的 api 的 http 响应代码是 200
标签: angularjs django http-headers django-rest-framework token