1

在通过 Google 进行身份验证后,oauth2.login获取access_tokenexpires_in. 在我的令牌过期之前一切都很好。到期后,当我再次发送带有旧令牌的数据请求时:

var URLHead = 'https://www.google.com/fusiontables/api/query?sql='
var URLTable = encodeURI('SELECT id,COUNT() FROM TABLE_ID')
var URLTail = '&access_token='+ old_token +'&jsonCallback=?'
var queryURL = URLHead + URLTable + URLTail
var jqxhr = $.ajax({
  type: "GET",
  url: queryURL,
  dataType: 'jsonp',
  success: function (d) {
    var max = d.table.rows[0].toString().substr(1)
    localStorage.setItem('cpage', Math.ceil(max / localStorage.getItem('delimeter')))
  },
  error: function(){alert('token_expired')}
})

努力成功,如果令牌过期,什么也不给。在互联网上找不到明确的例子如何处理到期?我应该算自己 3600 秒并删除 old_token 还是有任何优雅的方法来处理令牌过期错误?

4

1 回答 1

0

令牌过期后的响应是什么样的?API 不一定会抛出错误,只是一个正常的 JSON 响应。响应可能包含令牌已过期的内容,因此您可以使用它来即时检查。

尝试:

success: function (d) {
 if(d.error){
   if(d.error == 'invalid_token'){
    alert('invalid_token');
   }
 } else {
  // local storage etc 
 }
}

或(带错误处理):

var request = $.ajax({
  url: "https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=1/fFBGRNJru1FQd44Az%20%E2%80%8BqT3Zg",
  type: "GET",
});

request.done(function(msg) {
 // complete
});

request.fail(function(jqXHR, textStatus) {
  alert( "Request failed: " + textStatus );
});

​继承人的小提琴:http: //jsfiddle.net/MFe9d/

于 2012-07-04T13:32:19.200 回答