【发布时间】:2015-06-25 09:41:44
【问题描述】:
我正在做 Angular 项目。当我登录到应用程序时,我将从登录服务收到的 access_token 保存到 $cookies 中。此 access_token 会在 2 分钟后过期。 登录后,对于 subsequest 功能,我必须使用 $http 将此 access_token 发送到服务以获得有效响应。 一旦这个 access_token 在 2 分钟后过期,我就会调用一个服务,它将重新生成 access_token 并再次保存在 $cookies 中。 如果没有 access_token,我的其他功能将无法使用。
基本上,我需要在应用程序中的每个服务调用之前检查 $cookies 中是否存在访问令牌。如果访问令牌不存在,则需要使用 $http 通过另一个服务调用重新生成它,并将其保存在 cookie 中,然后是功能的所需服务调用。如果存在访问令牌,则执行所需的服务调用。
我的功能之一是:
mPosController.controller('offerController', ['$scope', '$route', '$cookies', '$rootScope', 'mosServiceFactory', 'ngDialog', '$modal', '$q', function ($scope, $route, $cookies, $rootScope, mosServiceFactory, ngDialog, $modal, $q) {
mosServiceFactory.viewAllOffers('page=0').then(function (data) {
//Do the desire functionality
});
}]);
我的服务是:
mPosServices.factory('mosServiceFactory', function ($http, $rootScope, $cookies,$q) {
return{
viewAllOffers: function (page) {
var allOffers = $http({
method: "get",
url: "myserviceurl?enrollmentId=" + $rootScope.enrollMentId + "&" + page + "&size=10&access_token=" + $cookies.get('access_token'),
});
return allOffers;
},
refresh_token: function () {
var refreshToken = $http({
method: "get",
url: "myserviceurl/oauth/token?grant_type=refresh_token&client_id=restapp&client_secret=restapp&refresh_token=" + $cookies.get('refresh_token'),
})
return refreshToken;
},
}
});
所以在调用 viewAllOffers() 之前,我需要检查 $cookies 中是否存在 access_token,如果没有,则调用 refresh_token 服务。
我一般如何做到这一点?
【问题讨论】:
-
你可以在
$http服务中尝试request拦截器,here是一些文档,向下滚动到拦截器部分