从AngularJs应用程序访问Django服务器:简易身份验证解决方案?

从AngularJs应用程序访问Django服务器:简易身份验证解决方案?,angularjs,django,authentication,http-headers,restful-authentication,Angularjs,Django,Authentication,Http Headers,Restful Authentication,我到处找,但似乎找不到一个有用的答案 我已经编写了一个angular应用程序,试图从我的公司编写的django RESTful后端提取数据。我有用户名和密码,但我不确定如何编写get请求以向后端提供身份验证凭据。我也不知道我到底应该在标题中提供什么 最终,我们将使用nginx进行通信 我想要什么 我正在寻找一个修复写入angular应用程序本身。我正在尝试将angular应用程序尽可能与django后端分开编写。我已经启用了跨源资源共享 这将是一个创可贴修复只是为了显示数据从后端。它不需要以任何

我到处找,但似乎找不到一个有用的答案

我已经编写了一个angular应用程序,试图从我的公司编写的django RESTful后端提取数据。我有用户名和密码,但我不确定如何编写get请求以向后端提供身份验证凭据。我也不知道我到底应该在标题中提供什么

最终,我们将使用nginx进行通信

我想要什么

我正在寻找一个修复写入angular应用程序本身。我正在尝试将angular应用程序尽可能与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'}
    });
};
我编写的第二个工厂返回方法:返回标题下NetworksInspector中的选项。是否有人能快速修复从我的api获取的数据

编辑:我的django后端不支持基本身份验证,只支持基于会话的身份验证。如何编辑我的get请求?

(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';
到相应的
位置
块。您也可以在django端使用中间件包(如django cors middleware()或django cors headers())执行此操作。

(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';

到相应的
位置
块。您还可以在django端使用中间件包,如django cors中间件()或django cors头()来实现这一点.

您首先需要知道在服务器端实现了哪种类型的
身份验证
授权
,即服务器查找身份验证/授权凭据的标头以及服务器期望的格式,然后在该标头键下发送凭据。例如,如果服务器以
username::password
格式在
Authorization
标题中检查身份验证凭据,则需要添加如下标题

headers: {'Authorization': 'johndoe::password'}

您首先需要知道服务器端实现了哪种类型的
身份验证
授权
,即服务器查找身份验证/授权凭据的标头以及服务器期望的格式,然后在该标头键下发送凭据。例如,如果服务器以
username::password
格式在
Authorization
标题中检查身份验证凭据,则需要添加如下标题

headers: {'Authorization': 'johndoe::password'}

是否有方法检查服务器要求的内容?是否有方法检查服务器要求的内容?我在上面已经尝试过,但现在我遇到了一个与交叉源引用相关的错误。我得到:
XMLHttpRequest无法加载https://www.thiswebsideexample/api/thing. 飞行前响应的HTTP状态代码403无效
目前我正在使用chrome exention CORS启用CORS。我是否需要将其放入应用程序的配置中?我需要更改哪些内容?编辑了我关于如何解决CORS问题的回复。我发现我们的网站不包括基本身份验证,只包括基于会话的身份验证。您知道一种仅从angular应用程序使用基于会话的身份验证来访问api的方法吗?目前,我无法更改django后端设置,因此无法添加基本的身份验证选项。我已经在上面尝试过,但现在我遇到了一个与交叉源引用相关的错误。我得到:
XMLHttpRequest无法加载https://www.thiswebsideexample/api/thing. 飞行前响应的HTTP状态代码403无效
目前我正在使用chrome exention CORS启用CORS。我是否需要将其放入应用程序的配置中?我需要更改哪些内容?编辑了我关于如何解决CORS问题的回复。我发现我们的网站不包括基本身份验证,只包括基于会话的身份验证。您知道一种仅从angular应用程序使用基于会话的身份验证来访问api的方法吗?目前我无法更改django后端设置,因此无法添加基本身份验证选项。