我试图为我的Chrome扩展提供一个免费的试用期,并一直在遵循Chrome文档如何实现这一点。
但是,当我的扩展加载时,后台脚本会将以下错误记录到控制台:
运行标识时出现未检查的运行时.lastError.getAuthToken:OAuth2未被授予或吊销。
控制台指出对chrome.identity.getAuthToken
的调用是罪魁祸首。下面是我的后台脚本中的相关代码:
var CWS_LICENSE_API_URL = 'https://www.googleapis.com/chromewebstore/v1.1/userlicenses/';
chrome.identity.getAuthToken({
'interactive': false
}, function(token) {
console.log('token', token);
var req = new XMLHttpRequest();
req.open('GET', CWS_LICENSE_API_URL + chrome.runtime.id);
req.setRequestHeader('Authorization', 'Bearer ' + token);
req.onreadystatechange = function() {
if (req.readyState == 4) {
var license = JSON.parse(req.responseText);
console.log('license', license);
}
};
req.send();
});
我的清单是这样设置的(为了简洁,省略了一些部分):
"manifest_version": 2,
"key": "kkkkkkkkkkkkkkk",
"background": {
"scripts": [
"background.js"
]
},
"permissions": [
"storage",
"identity",
"https://www.googleapis.com/"
],
"oauth2": {
"client_id": "cccccccccc.apps.googleusercontent.com",
"scopes": [
"https://www.googleapis.com/auth/chromewebstore.readonly"
]
}
以下是我尝试或证实的:
1.客户端id与Google开发人员控制台中使用我的扩展的id生成的值相匹配。
- Chrome Web Store API在Google开发者控制台中启用(它是唯一启用的API)。
1.清单中的键与我将扩展放到Web商店后生成的值相匹配。
1.在启用交互模式的情况下调用getAuthToken
会导致相同的错误。
1.我将我的代码与this example进行了比较,没有发现任何实质性的不同(尽管多一双眼睛来确认也无妨)。
如果有问题的话,我在Mac OS X上使用的是Chrome 42.0.2311.135(64位)。
关于导致错误的原因以及我需要更改什么才能使其消失,以便我可以查找auth令牌和许可证,您有什么想法吗?
2条答案
按热度按时间mcdcgff01#
在代码方面,唯一需要的更改是启用交互模式:
还有一些PEBCAK问题正在进行中,即:
1.交互式身份验证页面可能需要几秒钟才能显示。这似乎是带宽问题。这可能是文档建议在某种用户交互时触发身份验证请求而不是在首次加载扩展时触发的部分原因。
1.在
false
和true
之间切换交互并重新加载扩展并不能充分测试功能。getAuthToken
的结果被缓存。当我撤销授权,然后刷新,甚至删除并重新添加我的扩展时,相同的令牌会持续返回一段时间。在启用交互模式的情况下重新启动Chrome是我找到这个解决方案的原因。jv4diomz2#
在我的案例中,问题与Brave浏览器有关:
如果您也使用此浏览器,您可能需要启用brave://settings/extensions部分中的选项
Allow Google Login for extensions
。说明:
启用此选项时:它为扩展启用chrome.identity,这样扩展就可以从google获取OAuth令牌来认证用户。