我使用chrome.identity登录Chrome扩展程序中的第三方oauth提供程序。它适用于登录 - 当我使用launchWebAuthFlow时,我会看到第三方登录屏幕,并在登录流程后重定向回我的应用程序。
但是,我找不到在我的扩展程序中启用注销功能的方法。似乎不是清除缓存的登录标识的功能。下次调用launchWebAuthFlow时,它会自动以第一个用户身份登录,而不会提示我再次登录。
有没有办法清除chrome.identity插件的登录状态?
答案 0 :(得分:15)
我不了解具体的第三方提供商。但是当我使用带有chrome.identity.launchWebAuthFlow()的Google Oauth时,我遇到了类似的问题。我可以登录用户,但不能使用removeCachedAuthToken()
注销在这种情况下,要注销用户,我将chrome.identity.launchWebAuthFlow()与Google的注销网址一起使用,而不是使用oauth网址
chrome.identity.launchWebAuthFlow(
{ 'url': 'https://accounts.google.com/logout' },
function(tokenUrl) {
responseCallback();
}
);
这很好用。
答案 1 :(得分:6)
我发现在序列中调用这两个是有效的:
var url = 'https://accounts.google.com/o/oauth2/revoke?token=' + token;
window.fetch(url);
chrome.identity.removeCachedAuthToken({token: token}, function (){
alert('removed');
});
答案 2 :(得分:3)
您应该将prompt=select_account
添加到您的身份验证网址。你的问题将得到解决。
https://accounts.google.com/o/oauth2/auth?client_id= {的clientId}&安培; RESPONSE_TYPE =令牌安培;范围= {作用域}&安培; REDIRECT_URI = {的redirectUrl}&安培;提示= select_account
答案 3 :(得分:1)
对我来说,https://accounts.google.com/logout
不起作用。但https://accounts.google.com/o/oauth2/revoke?token=TOKEN
效果很好,使用简单的window.fetch(url)
,而不是hrome.identity.launchWebAuthFlow
。
答案 4 :(得分:0)
您可以使用chrome.identity.removeCachedAuthToken(object details, function callback)
方法清除身份缓存
https://developer.chrome.com/apps/identity#method-removeCachedAuthToken
答案 5 :(得分:0)
我最近遇到了同样的问题,最后通过在登录网址中添加login_hint=<new_user>
和prompt=consent
解决了这个问题。
答案 6 :(得分:0)
只有通过这种实现,我才能取得结果
chrome.identity.getAuthToken({ 'interactive': false }, currentToken => {
if (!chrome.runtime.lastError) {
// Remove the local cached token
chrome.identity.removeCachedAuthToken({ token: currentToken }, () => {})
// Make a request to revoke token in the server
const xhr = new XMLHttpRequest()
xhr.open('GET', `${googleRevokeApi}${currentToken}`)
xhr.send()
// Update the user interface accordingly
// TODO: your callback
}
})
答案 7 :(得分:-1)
如果您尝试 launchWebAuthFlow 登出但出现需要用户交互错误,那么您需要再添加一个标记以及url:
chrome.identity.launchWebAuthFlow (
{'url': 'https://some-logout-url/',
'interactive': true },
function(result) {
console.log(result);
}
);