我尝试为Chrome扩展程序提供免费试用期,并且一直关注Chrome documentation,了解如何实现这一目标。
但是,当我的扩展程序加载时,后台脚本会将以下错误记录到控制台:
运行identity.getAuthToken时未经检查的runtime.lastError:未授予或撤消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"
]
}
这是我尝试或确认的内容:
getAuthToken
会导致同样的错误。如果重要,我在Mac OS X上使用Chrome 42.0.2311.135(64位)。
有关导致错误的原因以及我需要更改以使其消失的任何想法,以便我可以查找身份验证令牌和许可证吗?
答案 0 :(得分:12)
代码方面,唯一需要的改变是启用交互模式:
chrome.identity.getAuthToken({
'interactive': true
}, function(token) {
...
});
还有一些PEBCAK问题正在发生。即:
false
和true
之间翻转互动并重新加载扩展程序并不是对功能的充分测试。 getAuthToken
的结果被缓存。当我撤销身份验证然后刷新甚至删除并重新添加我的扩展时,相同的令牌会继续返回一段时间。在启用交互模式的情况下重新启动Chrome是我解决此问题的原因。