如何从chrome.identity.getAuthToken()中检测到无效的身份验证令牌?

时间:2013-11-12 12:33:49

标签: google-chrome-extension

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

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

有关如何编写代码的任何建议吗?

1 个答案:

答案 0 :(得分:2)

GDocs 的其中一个实用程序类,即 GDrive App ,按如下方式处理:

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

    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();