对不起还有另一个可能是noob的问题,通常我不会屈服,直到我自己找到一个解决方案,但这个让我去了3天,是时候承认我被困了......
我尝试通过OAuth2验证Chrome扩展程序以使用PushBullet用户数据:
background.js
var client_id = '<32 DIGIT CLIENT ID>';
var redirectUri = "chrome-extension://lgekckejcpodobwpelekldnhcbenimbe/oauth2";
var auth_url = "https://www.pushbullet.com/authorize?client_id=" + client_id + "&redirect_uri=" + encodeURIComponent(redirectUri) + "&response_type=token";
chrome.identity.launchWebAuthFlow({'url':auth_url,'interactive':true}, function(redirect_url){
console.log(redirect_url)
});
的manifest.json:
"permissions": [
"identity",
"*://*.google.com/*",
"*://*.pushbullet.com/*",
"storage"
],
"web_accessible_resources": [
"/oauth2/*"
加载扩展程序时:
铬扩展://lgekckejcpodobwpelekldnhcbenimbe/oauth2#access_token=o.zrrWrDozxMu6kftrMHb89siYJQhRVcoL
我没想到会打开一个空页面,而是让launchWebAuthFlow捕获了URI并将其写入控制台日志中,就像在回调函数中编码一样......但它似乎在等待......
现在唯一的选择是关闭此空白页面,以查看以下记录:
运行identity.launchWebAuthFlow时未经检查的runtime.lastError:用户未批准访问权。
显然,我错过了一些至关重要的内容......我是否需要额外的代码&#34;某处&#34;在我的background.js中获取回调URI?
谢谢,真的很高兴帮助。
暗影
答案 0 :(得分:16)
您误解了identity
API。
您无法将其与自定义回调网址一起使用。 API希望您使用表单
的URLhttps://<app-id>.chromiumapp.org/*
您可以通过调用chrome.identity.getRedirectURL(path)
当提供商重定向到与模式
https://<app-id>.chromiumapp.org/*
匹配的URL时,窗口将关闭,最终的重定向URL将传递给回调函数。
这是因为很多OAuth提供商都不接受chrome-extension://
网址作为有效网址。
如果你的确很棒 - 但是你需要使用自己的OAuth库(和令牌存储,这更糟)。 chrome.identity
仅适用于上述内容。
请注意,网络请求实际上并未发送到此流程中的chromiumapp.org
地址 - 这是API截获的“虚拟”地址。
答案 1 :(得分:7)
为可能与之抗争的其他任何人快速阐述解决方案:
这是工作代码:
<强> background.js 强>
var client_id = '<CLIENT_ID>';
var redirectUri = chrome.identity.getRedirectURL("oauth2");
var auth_url = "https://www.pushbullet.com/authorize?client_id=" + client_id + "&redirect_uri=" + redirectUri + "&response_type=token";
chrome.identity.launchWebAuthFlow({'url':auth_url,'interactive':true}, function(redirect_url){
console.log(redirect_url)
});
<强> manifest.js 强>
"permissions": [
"identity",
"*://*.google.com/*",
"*://*.pushbullet.com/*",
"storage"
],
再一次,谢谢Xan并度过了美好的一天。
最诚挚的问候,
暗影