我一直在寻找各处,但似乎无法找到有帮助的答案。
我写了一个角度应用程序,试图从我公司编写的django RESTful后端提取数据。我有一个用户名和密码,但我不确定如何编写get请求以向后端提供身份验证凭据。我还对我应该在标题中提供的内容感到困惑。
最终,我们将使用nginx进行通信。
我想要什么
我正在寻找修补程序,以便在角度应用程序中自行编写。我试图尽可能将角度应用程序与django后端分开。我已经启用了跨源资源共享。
这将是一个乐队助手修复,只是为了显示来自后端的数据。无论如何,它不需要是永久性的。
到目前为止,我已经尝试过:
app.factory('mySamples', ['$http', function($http) {
return $http.get('website/api/foo', {
headers: {'username':"foo", 'password': 'bar'}
}).success(function(data) {
return data;
}).error(function(err) {
return err;
});
};
app.factory('mySamples', ['$http', function($http) {
return $http({method: 'GET', url: 'website/api/samples/', headers: {
'user': 'foo', 'auth':'bar'}
});
};
我写的第二个工厂在返回的标题下的网络检查器中返回METHOD:OPTIONS。有没有人只是为了从我的api获取数据而快速修复?
编辑:我的django后端不支持基本身份验证,只支持基于会话。我该如何编辑我的获取请求?答案 0 :(得分:1)
(1)如果您使用的是基本身份验证,则可以添加如下基本身份验证:
app.factory('mySamples', ['$http', function($http) {
var credentials = btoa(username + ':' + authtoken);
var authorization = {
'Authorization': 'Basic ' + credentials
};
return $http({method: 'GET', url: 'website/api/samples/', headers: authorization });
};
如果您的所有$ http调用都使用相同的身份验证,则可以使用$http.defaults.headers.common.Authorization
(2)我很确定nginx不提供会话处理 - 你必须在django中这样做。
(3)我通常不使用REST会话,因为REST通常是无状态的。
OP询问如何启用CORS。启用CORS通常在服务器端完成。你可以通过添加:在nginx中完成 add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
到适当的location
块。您也可以在django端使用django-cors-middleware(https://pypi.python.org/pypi/django-cors-middleware)或django-cors-headers(https://pypi.python.org/pypi/django-cors-headers)等中间件版本执行此操作。
答案 1 :(得分:1)
首先需要知道服务器端实现了哪种Authentication
和Authorization
,即服务器查找身份验证/授权凭据的头部以及服务器期望的格式,然后在该标头密钥下发送凭据。例如,如果服务器在格式为Authorization
的{{1}}标头中检查身份验证凭据,则需要添加标题,如
username::password