我正在开发一个与 Gmail 协作的扩展,希望用户可以在多个 Gmail 帐户之间切换,并仍能使用 Google REST API。我使用 chrome.identity.launchWebAuthFlow 来获取对 Google API 的 OAuth2 访问令牌。
该工作流程会打开一种模态的 Chrome Webview,顶部没有 url 栏。首次输入用户名和密码,并允许请求的范围后,webview 就会关闭。然后,我的应用程序会收到包含访问令牌的重定向 URI。很好。
问题出现在切换用户时。人们会认为只需检查新的电子邮件是否已登录,然后再次使用 chrome.identity.launchWebAuthFlow 来获取新令牌即可。
但不幸的是,第一个已登录用户似乎仍被缓存在系统中。
我尝试通过将approval_prompt设置为'force'来检查弹出的Chrome Webview。它似乎有一些与之相关的cookies。我想知道如何清除Webview中的持久数据。
唯一有效的方法似乎是完全关闭Chrome。这对我的扩展来说不是可接受的用户体验。
如果有人能提供任何指导,提前感谢您。
该工作流程会打开一种模态的 Chrome Webview,顶部没有 url 栏。首次输入用户名和密码,并允许请求的范围后,webview 就会关闭。然后,我的应用程序会收到包含访问令牌的重定向 URI。很好。
问题出现在切换用户时。人们会认为只需检查新的电子邮件是否已登录,然后再次使用 chrome.identity.launchWebAuthFlow 来获取新令牌即可。
但不幸的是,第一个已登录用户似乎仍被缓存在系统中。
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。它似乎有一些与之相关的cookies。我想知道如何清除Webview中的持久数据。
唯一有效的方法似乎是完全关闭Chrome。这对我的扩展来说不是可接受的用户体验。
如果有人能提供任何指导,提前感谢您。