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

chrome.identity.launchWebAuthFlow, how to clear user cache?

本文关键字:清除 用户 缓存 何清除 identity launchWebAuthFlow chrome      更新时间:2023-09-26

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

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

此工作流打开了一种模式类型的chrome Web视图。顶部没有url栏。在第一次输入用户名和密码,然后允许请求的作用域后,Web视图将关闭。然后,我的应用程序接收包含访问令牌的重定向URI。太棒了

切换用户时出现问题。有人会认为这很简单,只需检查是否登录了新的电子邮件,然后再次执行chrome.identity.lonchWebAuthFlow以获取新的令牌。

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

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网络视图。似乎有一些cookie与之相关。我想知道如何从网络视图中清除持久数据。

唯一能起作用的是完全关闭chrome。对于我的扩展来说,这不是一个可接受的用户体验。

如果有人对此有任何意见,请提前感谢。

如果您想删除以下内容:

  • 从令牌缓存中删除访问令牌
  • 删除用户的帐户首选项
  • 从所有身份验证流中删除用户

然后你可以使用以下两种方式之一:

  1. 使用这行代码删除所有身份验证令牌

    chrome.identity.clearAllCachedAuthTokens(() => undefined)
    
  2. 分别删除每个身份验证令牌。有关更多信息,请查看以下参考:removeCachedAuthToken

    chrome.identity.removeCachedAuthToken(
       details: InvalidTokenDetails,
       callback?: function,
    )
    

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

从Identity API的令牌缓存中删除OAuth2访问令牌。

如果发现访问令牌无效,则应将其传递给removeCachedAuthToken以将其从缓存中删除。然后,应用程序可以使用getAuthToken检索新的令牌。