我正在尝试将google calendar api集成到我的angularjs spring mvc应用程序中。我能够连接到谷歌并从日历中获取所有事件。第一次我得到一个访问令牌和相同的访问令牌我存储到数据库。一小时后,令牌即将过期,我通过发送刷新令牌并获取这样的新访问令牌来发布到谷歌令牌端点。
$scope.checkAccessTokenExpiry = function(){
AccountSettingService.checkAccessTokenExpiry().then(function(response){
$scope.difference = response.data;
var refresh_token = $scope.loginuser.refreshToken;
var tokenExpiry = $scope.difference;
var client_id = my client_id;
var client_secret = client_secret;
var grant_type = 'refresh_token';
if(tokenExpiry>50){
$.ajax({
type: 'POST',
url: 'https://www.googleapis.com/oauth2/v4/token?
client_id='+my client id+'&client_secret='+client_secret+'&grant_type=refresh_token&refresh_token='+refresh_token+'',
headers: {
ContentType: 'application/json'
},
success: function(result) {
var access_token = result.access_token;
AccountService.saveToken(access_token).then(function(response){
if(response!=null){
alert("saved");
}
});
},
processData: false,
});
}
});
}
$interval( function(){ $scope.checkAccessTokenExpiry; }, 3300000, true);
我在页面加载时在ng-init中调用了这个$ scope.checkAccessTokenExpiry()函数。一切正常,但是一小时后前一个令牌到期,如果我转到日历,那么即使我正在加载它也会显示无效的凭据错误加载方法。我刷新同一页面后,一切正常。如果以前的访问令牌持续时间大于50分钟,我正在调用谷歌令牌端点。但首先这似乎没有被调用。只有在刷新后它似乎如果我在任何其他选项卡一小时后,如果我切换到日历选项卡它显示错误。如果我刷新然后它工作正常显示事件。为什么它不工作第一次虽然我加载方法onload?是有任何其他方法来处理这个,以便每次检查条件,如果它满足条件,我可以存储新的访问令牌而不刷新页面,因为现在1小时后第一次它不起作用?