问题:
我在google脚本的平台上有一个应用程序,这意味着允许在不使用任何帐户的情况下上传到Google云端硬盘。上传功能运行良好,但我遇到很长/大上传的问题。我现在试图解决这个问题一周,主要是因为我需要测试令牌的到期时间。
当用户尝试上传大文件(20/30 GB)服务器时,Auth令牌过期Error Screenshot 1,然后我收到此错误Error screenshot 2。
所以我需要的是使用一个将在5个多小时内过期的令牌。我确实尝试使用刷新令牌,但我最后很困惑。我确实在OAuth 2.0 Playground中创建了刷新令牌。
我尝试过的事情:
问题
我是否可以永久授权应用访问Picker? (因为它始终是在服务器端代码访问驱动器的同一用户)?
我应该使用刷新令牌来获取身份验证令牌吗?
原始代码:
var a = (new google.picker.PickerBuilder)
.addView(t)
.enableFeature(google.picker.Feature.NAV_HIDDEN)
.setOAuthToken("<?= ScriptApp.getOAuthToken(); ?>")
.enableFeature(google.picker.Feature.MULTISELECT_ENABLED)
.hideTitleBar()
.setSize(DIALOG_DIMENSIONS.width - 2, DIALOG_DIMENSIONS.height - 2)
.setCallback(pickerCallback).setOrigin(config.FORM_EMBED_DOMAIN)
.build()
任何帮助都将非常感激。
答案 0 :(得分:1)
afaik,Picker不能使用刷新令牌并使用它来更新其访问令牌。这几乎可以肯定是设计,因为刷新令牌永远不应该放在不安全的设备上,例如浏览器。
我建议的唯一方法是: -
A 1.在安全服务器上有刷新令牌
或
B 1.使用gapi,immediate = true(或者你当前获得访问令牌)
有一个setTimeout / setInterval函数,每隔59分钟,使用选项A或B获取一个新的访问令牌
通过查找存储访问令牌的内部属性将其戳入Picker对象。
这很脆弱,但我真的想不出更好的答案。
答案 1 :(得分:0)
建议的解决方案没有解决问题。
我尝试使用Google表单进行相同操作,我尝试上传用于测试原始问题中描述的错误的相同文件。事实证明,我有完全相同的错误!
所以,我认为是&#34;作为设计&#34;的一个案例。我已经向Google发送了错误报告,我们有一个G Suite帐户,希望我们收到一些反馈。但我认为这不容易解决。
谷歌表单替代方案的主要问题是它需要Gmail / Google帐户,如果您要上传的文件大于免费配额,则上传将失败。我尝试使用21 GB的个人帐户(上传者)和无限制的G Suite帐户(收件人和表单所有者)。
答案 2 :(得分:0)
所以,
经过大量测试不同的选项后,最简单/最快的解决方案是限制客户端上传最多3个文件(因为您可以在流程开始时上传3个文件)。当您尝试上传第4个文件时,您将收到身份验证错误。
案件结案!
答案 3 :(得分:-1)
您可以在 1 小时后处理创建的 picker 对象,并使用新获取的 access_token 创建一个新对象
https://developers.google.com/picker/docs/reference#picker
查看 API 描述中的方法 dispose