使用Angular服务的请求拦截器对REST get调用进行简单的身份验证
Simple authentication of REST get call with request interceptors of an Angular service
我想传递一个用户名和密码组合,这是对api进行REST调用所需要的。
Controller.js
var app = angular.module('myApp', []);
//The service to put the interceptor configuration on (not on all $http method calls)
app.factory('getCallsApi', ['$http', function($http) {
return {
get: function(callback) {
$http.get(/* REST URI */).success(function(data) {
callback(data);
});
}
}
}]);
var Interceptor = function($q) {
return {
request: function(config) {
//TODO: Pass in username and password (hardcoded) to get through authentication
},
requestError: function(rejection) {
},
response: function(config) {
//TODO: ADD Cross origin headers
},
responseError: function(rejection) {
}
}
}
app.config(['$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push(Interceptor);
}]);
myApp.controller('appController', ['$scope','getCallsApi', function($scope, getCallsApi) {
getCallsApi.get(function(data) {
console.log(data);
});
}]);
我目前在控制台中收到两个错误。首先是401状态,表示未授权访问,并且在请求的资源上没有找到跨源标头。我不能自己把X源标头放在请求的资源上,因为我没有编辑API响应的权利。
不是说交叉原点问题,而是如何在请求头中添加一些东西。在我的例子中,我传入了一个存储在localstorage中的令牌。我们把这个值绑定到一个angular常量中,并把它注入到拦截器服务中:
.constant('AUTH_TOKEN', localStorage.getItem('myapp.authToken'))
在你的拦截器中:
var Interceptor = function ($q) {
return {
request: function (config) {
if (AUTH_TOKEN) {
config.headers['Authorization'] = 'Token ' + AUTH_TOKEN;
}
return config;
}
}
}
相关文章:
- 如何在调用下一个请求之前完成第一个Ajax Get请求
- 在发布后调用jQuery Get
- 如何检查$httpBackend中是否未进行GET调用
- 当用$.getScript()加载脚本时,有一种方法可以从用$.get script()装载的脚本中调用父脚本中的函数
- 将c#get方法a转换为post方法,从javascript调用
- CakePHP错误:在非对象上调用成员函数get(),使用cakejavascript助手时出错
- 成功函数未在 ajax GET 方法中调用
- JQuery AJAX - 如何使用方法 GET 调用刷新/重新加载页面
- 调用$.get函数时JQuery中出现无效标签错误
- 由于浏览历史设置,angularjs http.get调用未在ie10中启动
- 得到"未捕获的类型错误:未定义的不是函数“;当试图从对象调用get()或set()时
- 余烬数据断言失败:无法对未定义的对象使用“查询”调用 get
- 循环不'调用$.get时无法按预期工作
- 如何将ng-model传递给控制器函数,该控制器函数会向nodeJS服务器调用GET请求
- 使用POST方法调用REST api会调用GET方法
- 为什么IE9在按enter键时调用get方法而不是post,如何修复?
- Sequelize:调用.get({plain: true}))返回.get不是函数
- jQuery ajax调用(.get、.post.、.load等),返回数据和IE问题
- 在 AngularJS 中调用 GET 后,控制器内对象的值不会更改
- 如何从html文件中的li标签调用get属性