我尝试使用chrome.identity.launchWebAuthFlow
方法在Chrome扩展程序中验证Google用户的登录信息,以获取他的电子邮件地址,我的代码是:
"key": "Key_here",
"oauth2": {
"client_id": "my_client_id.apps.googleusercontent.com",
"scopes": [
"https://www.googleapis.com/auth/userinfo.email"
]
}
function startOAuth() {
chrome.runtime.sendMessage({"message": "start_oauth"});
}
$("#login").on("click", startOAuth);
var manifest = chrome.runtime.getManifest();
var clientId = encodeURIComponent(manifest.oauth2.client_id);
var scopes = encodeURIComponent(manifest.oauth2.scopes.join(' '));
var redirect_uri = chrome.identity.getRedirectURL();
chrome.runtime.onMessage.addListener(
function (request, sender, sendResponse) {
if (request.message === "start_oauth") {
chrome.identity.launchWebAuthFlow({
"url": "https://accounts.google.com/o/oauth2/v2/auth?" +
$.param({
"scope": scopes,
"response_type": "token",
"client_id": clientId,
"redirect_uri": redirect_uri,
"prompt": "consent"
}),
"interactive": true
}, function (response) {
console.log('response: ' + response);
});
}
}
);
但是当我点击弹出图标时,我会进入后台的控制台:
回复:未定义
运行identity.launchWebAuthFlow时未经检查的runtime.lastError: 无法加载授权页面。
当我在浏览器中打开网址时:
https://accounts.google.com/o/oauth2/v2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&response_type=token&client_id=<my_client_id>&redirect_uri=https%3A%2F%2F<extension-id>.chromiumapp.org%2F&prompt=consent
我收到错误:
我已将扩展程序加载为已解压缩的扩展程序,已将chrome://extensions/
中名称显示在Application ID
下的扩展程序ID {{3} }}
但在这个领域,它说:
申请ID
应用的Chrome网上应用店网址的最后一部分
这是否意味着我必须将扩展程序发布到Chrome网上应用店才能进行redirect_uri
匹配?
注意:
要获取扩展程序的密钥,我将其放入清单并将其称为"Key_here"
,我将扩展程序的清单上传到 Chrome网上应用店开发人员& #39; s仪表板,作为草稿,并从那里获得public key
并放入清单。
现在redirect_uri
在Google API控制台和我的解压扩展程序ID中是相同的,我缺少什么?
答案 0 :(得分:0)
您可以参考此thread。确保您拥有key in your manifest。
当您在Google OAuth控制台中注册应用程序时,您将提供应用程序的ID,该ID将在令牌请求期间进行检查。因此,在开发过程中获得一致的应用程序ID非常重要。
其他详细信息:How to change chrome packaged app id Or Why do we need key field in the manifest.json?