AngularJS withCredentials

我一直在做一个AngularJS项目,它必须发送AJAX调用restfull web服务。 这个webservice是在另一个域,所以我不得不在服务器上启用cors。 我通过设置这些标题做到了这一点:

cresp.getHttpHeaders().putSingle("Access-Control-Allow-Origin", "http://localhost:8000"); cresp.getHttpHeaders().putSingle("Access-Control-Allow-Credentials", "true"); cresp.getHttpHeaders().putSingle("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT"); cresp.getHttpHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With"); 

我能够将AngularJS的AJAX请求发送到后端,但是当我尝试获取会话属性时,我遇到了一个问题。 我相信这是因为sessionid cookie不会发送到后端。

我能够通过设置withCredentials为true来解决这个问题。

 $("#login").click(function() { $.ajax({ url: "http://localhost:8080/api/login", data : '{"identifier" : "admin", "password" : "admin"}', contentType : 'application/json', type : 'POST', xhrFields: { withCredentials: true }, success: function(data) { console.log(data); }, error: function(data) { console.log(data); } }) }); $("#check").click(function() { $.ajax({ url: "http://localhost:8080/api/ping", method: "GET", xhrFields: { withCredentials: true }, success: function(data) { console.log(data); } }) }); 

我面临的问题是我无法使用$ http服务在AngularJS中工作。 我试过这样的:

 $http.post("http://localhost:8080/api/login", $scope.credentials, {withCredentials : true}). success(function(data) { $location.path('/'); console.log(data); }). error(function(data, error) { console.log(error); }); 

谁能告诉我我做错了什么?

你应该像这样传递一个configuration对象

 $http.post(url, {withCredentials: true, ...}) 

或在旧版本中:

 $http({withCredentials: true, ...}).post(...) 

另请参阅您的其他问题 。

在你的应用程序configurationfunction添加这个:

 $httpProvider.defaults.withCredentials = true; 

它将为您的所有请求附加这个标头。

不要忘记注入$httpProvider

编辑:2015-07-29

这是另一个解决scheme:

HttpIntercepter可以用来添加常见的头文件以及常用的参数。

添加这个在你的configuration:

$httpProvider.interceptors.push('UtimfHttpIntercepter');

并用名称UtimfHttpIntercepter创build工厂

  angular.module('utimf.services', []) .factory('UtimfHttpIntercepter', UtimfHttpIntercepter) UtimfHttpIntercepter.$inject = ['$q']; function UtimfHttpIntercepter($q) { var authFactory = {}; var _request = function (config) { config.headers = config.headers || {}; // change/add hearders config.data = config.data || {}; // change/add post data config.params = config.params || {}; //change/add querystring params return config || $q.when(config); } var _requestError = function (rejection) { // handle if there is a request error return $q.reject(rejection); } var _response = function(response){ // handle your response return response || $q.when(response); } var _responseError = function (rejection) { // handle if there is a request error return $q.reject(rejection); } authFactory.request = _request; authFactory.requestError = _requestError; authFactory.response = _response; authFactory.responseError = _responseError; return authFactory; }