我想使用angular $ http与api进行交互,但是我需要将我的身份验证令牌存储到$ http,以便在每个请求中发送删除,我希望令牌存在,我看到人们在标题中放置了令牌,我知道如何将它放在标题中,但是我不确定将标记放入标题是否是一个好习惯,这是我的配置:
config(['$stateProvider', '$urlRouterProvider','$http', function($stateProvider, $urlRouterProvider, $http) {
$urlRouterProvider.otherwise("/view1");
}]);
答案 0 :(得分:1)
配置$ httpProvider!
'use strict';
angular.module('app')
.config(configHttp);
configHttp.$inject = ['$httpProvider'];
function configHttp($httpProvider) {
if (!$httpProvider.defaults.headers.get) {
$httpProvider.defaults.headers.get = {};
}
//disable IE ajax request caching
$httpProvider.defaults.headers.get['If-Modified-Since'] = 'Mon, 26 Jul 1997 05:00:00 GMT';
// extra
$httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
$httpProvider.defaults.headers.get.Pragma = 'no-cache';
// User Credential
$httpProvider.defaults.headers.post['user-credential'] = 'xxxxxx';
}
答案 1 :(得分:1)
要与需要令牌身份验证的API进行通信,您需要设置拦截器。
在您的配置文件中:
function config(..., $httpProvider) {
$httpProvider.interceptors.push('authInterceptor');
...
}
angular
.module('app')
.config(config);
authInterceptor是一个工厂,负责为所有$ http请求添加标头:
function authInterceptor($rootScope, $q, $window) {
return {
request: function (config) {
config.headers = config.headers || {};
if ($window.sessionStorage.token) {
config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token;
}
return config;
},
responseError: function (rejection) {
if (rejection.status === 401) {
console.log("not authorised");
}
return $q.reject(rejection);
}
};
};
angular
.module('app')
.factory('authInterceptor', authInterceptor);
令牌可以来自sessionStorage,cookies或任何其他内容。
答案 2 :(得分:0)
明确遵循HTTP规范,授权令牌的正确位置在标题中。