javascript - chrome.identity.launchWebAuthFlow,如何清除用户缓存?

标签 javascript google-chrome-extension oauth-2.0

我正在开发一个适用于 Gmail 的扩展程序,我希望能够允许用户在 Gmail 帐户之间切换并仍然使用 Google REST API。

我正在使用 chrome.identity.launchWebAuthFlow 获取 Google API 的 OAuth2 访问 token 。

此工作流打开一种模式类型的 chrome webview。顶部没有网址栏。第一次输入用户名和密码,然后允许请求的范围时,webview 关闭。然后,我的应用会收到包含访问 token 的重定向 URI。太好了。

切换用户时出现问题。人们会认为这就像检查新电子邮件是否已登录一样简单,然后再次执行 chrome.identity.launchWebAuthFlow 以获取新 token 。

不幸的是,第一个登录的用户似乎仍然缓存在系统中。

function webAuthFlow(userEmail, forceApprovalPrompt, xhrCallback) {
  var baseUrl = 'https://accounts.google.com/o/oauth2/auth';
  var forceApprovalPrompt = forceApprovalPrompt || 'auto';
  var urlParams = {
    'redirect_uri' : 'https://inobjcmbajbmllkgkigemcfnikdmlidn.chromiumapp.org/callback',
    'response_type' : 'token',
    'client_id' : 'not shown here',
    'scope' : 'https://mail.google.com/ https://www.google.com/m8/feeds/',
    'approval_prompt' : 'force',
    'include_granted_scopes' : 'true'
  };

  var providerDetails = {
    url : baseUrl + '?' + stringify(urlParams),
    interactive : true
  }
  var xhrCallback = xhrCallback || false;
  console.log(xhrCallback);
  var callback = function(responseUrl) {
    var params = {}, 
    queryString = responseUrl.split('#')[1],
    regex = /([^&=]+)=([^&]*)/g,
    m,
    validateUrl = 'https://www.googleapis.com/oauth2/v1/tokeninfo'
    while (m = regex.exec(queryString)) {
      params[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
    }
    validateToken(params.access_token, function() { storeToken(params.access_token, userEmail) }, xhrCallback);
  };
  chrome.identity.launchWebAuthFlow(providerDetails, callback);
};

我试图通过将 approval_prompt 设置为“force”来检查弹出的 chrome webview。似乎有一些与之关联的 cookie。我想知道如何从 webview 中清除持久数据。

唯一似乎有效的是完全关闭 chrome。不是我的扩展可接受的用户体验。

如果有人对此有任何指示,请提前致谢。

最佳答案

使用 chrome.identity.removeCachedAuthToken(object details, function callback) 方法。

Removes an OAuth2 access token from the Identity API's token cache.

If an access token is discovered to be invalid, it should be passed to removeCachedAuthToken to remove it from the cache. The app may then retrieve a fresh token with getAuthToken.

关于javascript - chrome.identity.launchWebAuthFlow,如何清除用户缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26130386/

相关文章:

node.js - 如何刷新 Smartcar 访问 token ?

oauth - RFC6749 中关于 OAuth2 的 scope = scope-token *( SP scope-token ) scope-token = 1*( %x21/%x23-5B/%x5D-7E ) 是什么意思

oauth-2.0 - 如何使用 OIDC/OAuth 保护 API

javascript - 如何在响应式布局中垂直对齐div内的文本

javascript - Chrome - 检测浏览器关闭或标签页关闭

javascript - 从 'dynamic' iframe 访问 DOM

javascript - getElementsByName 失败,但 getElementById 可以使用 Chrome 扩展

javascript - 通过我无法控制的代码检测类删除

javascript - 循环之前的数组排序不保持数组排序

javascript - 如何替换 window.getSelection().toString() 数据