我正在开发一个与Gmail兼容的扩展,我希望能够允许用户在Gmail帐户之间切换,并且仍然使用Google REST API。
我使用chrome.identity.launchWebAuthFlow来获取GoogleAPI的OAuth2访问令牌。
这个工作流打开了一个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网页视图。似乎有一些cookie与之关联。我想知道如何从网页视图中清除持久数据。
唯一可行的是完全关闭Chrome。对我的扩展来说,这不是一个可以接受的UX。
提前感谢,如果有人对此有任何建议。
2条答案
按热度按时间dgsult0t1#
使用
chrome.identity.removeCachedAuthToken(object details, function callback)
方法。从Identity API的令牌缓存中删除OAuth2访问令牌。
如果发现访问令牌无效,则应将其传递给removeCachedAuthToken以将其从该高速缓存中删除。然后应用可以使用getAuthToken检索新令牌。
imzjd6km2#
如果要删除以下内容:
然后,您可以使用以下两种方法之一:
1.使用以下代码行删除所有授权令牌
1.单独删除每个授权令牌。有关更多信息,请查看此参考:removeCachedAuthToken