google-chrome-extension - 在 chrome 扩展中,如何从当前 chrome 用户以外的 gmail 用户获取访问令牌?
问题描述
我创建了一个可在 mail.google.com 页面上使用的 chrome 扩展程序,并使用 gapi 来管理电子邮件,如果 chrome 用户与 gmail 用户不匹配,则效果不佳。
原因是我从 chrome.identity.getAuthToken 获得了一个 access_token,它为我提供了一个 chrome 当前用户,但不是一个 gmail 用户。
我尝试在我的扩展程序中使用 gapi.auth2 来获取 gmail 用户访问令牌,但没有运气:
从 background.js 使用时,它会出现“gapi.auth2.ExternallyVisibleError: Invalid cookiePolicy”错误
当从 content.js 使用相同的代码时,它会出现“gapi undefined”错误。
有没有办法从当前的 gmail 用户而不是 chrome 用户那里获取 access_token?
解决方案
chrome.identity.launchWebAuthFlow 为我工作。
创建 oauth2 网址:
var url = 'https://accounts.google.com/o/oauth2/auth' +
'?client_id=' + clientId +
'&response_type=token' +
'&redirect_uri=' + redirectUri +
'&login_hint=' + email +
'&scope=' + scopes;
redirectUri在哪里https://<your extension id>.chromiumapp.org/oauth2
,它必须在授权重定向 URI 列表中(在开发人员控制台中)。我在这里有点挣扎,因为最初我创建了“chrome app”凭据并且没有授权的重定向 URI 选项,所以我切换到“web app”凭据。
email是当前用户的电子邮件。如果用户已经授予权限,则指定电子邮件有助于省略对话。
clientId和范围需要手动指定,它们不会从清单中自动获取。
然后运行launchWebAuthFlow:
chrome.identity.launchWebAuthFlow({
'url': url,
'interactive': true
}, function (redirectedTo) {
// check errors and get token from redirect url
});
推荐阅读
- android - 如何在第三方活动上添加进度条
- python - Heroku 无法安装 av (pyav)
- ruby-on-rails - Rails:如何使用 Apipie gem 使用查询参数创建创建 api 的文档
- linux - linux-headers-$(uname -r) 安装程序,但 /usr/include/ 未使用新标头更新
- c# - 微软交换。如何连接到指定的数据库?
- python - Python C API错误重新启动解释器
- visual-studio-code - 如何在 VSCode 的资源管理器侧栏中隐藏窗格?
- html - 我可以控制换行的高度吗?
- r - R - 用于循环的 lmer 函数
- python - 如何在二进制图像中获取 4 个角白色像素的像素位置