Passing authorization bearer token using BreezeJS OData data service
在使用OData数据服务时,如何告诉Breeze包括授权承载令牌标头?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | //Configured breeze to use OData breeze.config.initializeAdapterInstance('dataService', 'OData'); //Configured breeze to use AngularJS ajax var instance = breeze.config.initializeAdapterInstance('ajax', 'angular', true); //Tried passing authorization bearer token header using setHttp with no success //NOTE: $http setup with $http.defaults.headers.common['Authorization'] = 'Bearer...' instance.setHttp($http); //Tried passing authorization bearer token header using ajax settings with no success instance.defaultSettings = { headers: { 'Authorization': 'Bearer...' }, }; //Fiddler shows no authorization bearer token header for following query var manager = new breeze.EntityManager('/odata/'); var query = breeze.EntityQuery.from('Customers'); return manager.executeQuery(query).to$q(querySucceeded, queryFailed); |
我不知道您是否解决了您的问题。这对我有用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | function configureBreeze() { // configure to use the model library for Angular breeze.config.initializeAdapterInstance("modelLibrary","backingStore", true); var accessToken = Security.user.access_token; if (Security.user.access_token) { // get the current default Breeze AJAX adapter & add header required for the Web API bearer token mechanism var ajaxAdapter = breeze.config.getAdapterInstance("ajax"); ajaxAdapter.defaultSettings = { headers: { 'Authorization': 'Bearer ' + accessToken }, }; } } |
它是对configureBreeze方法的修改,该方法在asp.net MVC4的Angular / Breeze SPA模板的datacontext.js脚本中找到。
希望有帮助。
1 2 3 4 5 6 7 | //instance.defaultSettings = { // headers: { // 'Authorization': 'Bearer...' // }, //}; instance.headers['Authorization'] = 'Bearer...'; |
Breeze网站上有一个示例(在OData AJAX下):http://www.getbreezenow.com/documentation/controlling-ajax
1 2 3 4 5 6 7 8 9 10 | var oldClient = OData.defaultHttpClient; var myClient = { request: function (request, success, error) { request.headers.Authorization = authorization; return oldClient.request(request, success, error); } }; OData.defaultHttpClient = myClient; |
我有同样的问题。在查看了oData的轻量级dataservice之后,我认为它只是忽略了ajax提供程序,因为它正在使用datajs进行请求。因此
1 2 3 4 5 | var base = window.OData.request; window.OData.request = function (request, success, error, handler, httpClient, metadata) { angular.extend(request.headers, { Authorization: $rootScope.token }); return base(request, success, error, handler, httpClient, metadata); }; |