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; }