我有一个服务工厂,其中有一个像这样的Angular请求拦截器:
var module = angular.module('MyAuthServices', ['ngResource']);
module
.factory('MyAuth', function () {
return {
accessTokenId: null
};
})
.config(function ($httpProvider) {
$httpProvider.interceptors.push('MyAuthRequestInterceptor');
})
.factory('MyAuthRequestInterceptor', [ '$q', '$location', 'MyAuth',
function ($q, $location, MyAuth) {
return {
'request': function (config) {
if (sessionStorage.getItem('accessToken')) {
console.log("token["+window.localStorage.getItem('accessToken')+"], config.headers: ", config.headers);
config.headers.authorization = sessionStorage.getItem('accessToken');
}
return config || $q.when(config);
}
,
responseError: function(rejection) {
console.log("Found responseError: ", rejection);
if (rejection.status == 401) {
console.log("Access denied (error 401), please login again");
$location.path('/init/login');
}
return $q.reject(rejection);
}
}
}]);
然后在我的登录控制器中,我使用以下代码存储访问令牌:
sessionStorage.setItem('currentUserId', $scope.loginResult.user.id)
sessionStorage.setItem('accessToken', $scope.loginResult.id)
sessionStorage.setItem('user', JSON.stringify($scope.loginResult.user))
sessionStorage.setItem('userRoles', JSON.stringify($scope.loginResult.roles))
这样我可以在登录后的每个请求中分配头信息。这只是我的做法,完全可以接受批评,但它似乎非常有效。