处理oAuth2 access_token到期

时间:2012-07-04 12:45:53

标签: html5 jquery oauth-2.0 google-fusion-tables

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

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')}
})

致力于成功,如果令牌过期则不提供任何内容。整个互联网都无法找到如何处理到期的明确例子? Shouold我算自己3600秒并删除old_token还是有任何优雅的方法来处理令牌过期错误?

1 个答案:

答案 0 :(得分: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/