0

我的扩展程序的 onInstall 挂钩调用 chrome.identity.getAuthToken()。如果这是我第一次运行该应用程序,一切正常。

我遇到的问题是,在测试期间,我正在撤销访问权限,然后重新安装扩展。在这种情况下,getAuthToken() 将返回缓存的无效令牌。一段时间后,当我尝试使用扩展程序时,我的扩展程序失败 401。我想要做的是检测扩展是否来自缓存,并立即将其删除,以便我可以进行身份​​验证对话。如果我可以访问令牌到期时间,我可以推断其有效性,但是 afaik,到期时间不可见。

关于如何围绕这个编码的任何建议?

4

1 回答 1

2

GDrive App的实用程序类之一,即GDocs处理它如下:

  1. 获取令牌(使用chrome.identity.getAuthToken())。
  2. 使用该令牌发出请求。
  3. 如果请求失败,则从缓存中清除它(使用chrome.identity.removeCachedAuthToken())并请求一个新的。(它允许最多 1 次重试,因此如果问题不是令牌过期,它不会进入无限循环。)

编码:

GDocs.prototype.upload = function (blob, callback, retry) {
  var onComplete = function (response) {...}.bind(this);
  var onError = function (response) {
    if (retry) {
      // `removeCachedAuthToekn()` uses `chrome.identity.removeCachedAuthToken()`
      // to remove the token from cache and then requests a new one using
      // `chrome.identity.getAuthToken()`. Finally, it calls `upload()` again
      // passing the `retry` parameter with value `false` */
      this.removeCachedAuthToken(...);
    } else {
      // The failure is permanent...
    }
  }.bind(this);
...

uploader = ...
...
uploader.upload();
于 2013-11-12T12:55:57.987 回答