【发布时间】:2018-07-17 18:15:48
【问题描述】:
我有一个 Chrome 扩展程序,它在清单中包含 Drive API。安装时,当用户打开 Google Doc 时,background.js 会弹出同意屏幕以获取用户访问其 Google Drive 的权限。
这在安装时工作正常。但是,如果用户从云端硬盘中删除该应用程序,代码不会再次弹出同意屏幕 - 它只是获取一个令牌并尝试云端硬盘仅得到 401 错误。
我原以为如果不批准,auth 调用会弹出同意...
显然,如果用户删除了您的应用,您不应该一直请求许可 - 我现在只是尝试处理最简单的情况。
我的一些用户从未看到同意页面,或者看到它并关闭它...并且不再提示。
清单:
"oauth2": {
"client_id": "xxxxxxxxxx-smaehlat7c66p1ns6t90ssj3jmlrrecm.apps.googleusercontent.com",
"scopes": [
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/userinfo.profile",
"https://www.googleapis.com/auth/drive.readonly"
]
},
Background.js:
googleFileID = getIdFromUrl(activeURL);
chrome.identity.getAuthToken({ 'interactive': true }, function(token) {
console.log('In Chrome Identity and obtained token: ' + token);
$.ajax({
type: "GET",
beforeSend: function(request) {
request.setRequestHeader("Authorization", "Bearer " + token);
},
url: "https://www.googleapis.com/drive/v3/files/" + googleFileID + "?fields=owners",
dataType: 'json',
processData: true,
success: function(gDocsMeta1) {
// DO STUFF
Google API 控制台: 我已经设置了 API 并且可以看到流量,虽然我的流量中有 10% 是错误,我将其归因于上述问题。
我使用 Google Firebase 进行用户身份验证...如果相关的话。虽然我的一些用户选择使用 Google 身份验证来创建帐户,但许多用户使用电子邮件注册。这个问题困扰着这两种类型的注册。
任何帮助表示赞赏!
【问题讨论】:
-
您是否尝试过使用
chrome.identity.removeCachedAuthToken删除缓存的令牌,然后再次调用chrome.identity.getAuthToken?另一方面,401 错误不会出现在 Google API 控制台中。我发现drive.files.get方法经常失败。我现在使用drive.files.list和q参数来过滤所需的文件 -
不,我没有。我陷入了“撤销”作为实现这一目标的一种方式......所以谢谢你。我基本上仍然有一个不再好的令牌...... chrome.identity.removeCachedAuthToken 似乎可以解决问题。以下是对差异的很好讨论:stackoverflow.com/questions/17337107/… 非常感谢!如果你想把它写成答案,我会接受它......
标签: firebase google-chrome-extension google-drive-api google-oauth