2

问题:我应该如何在Google Picker和Google云端硬盘中使用刷新令牌?

我对谷歌脚本的平台的应用程序,这意味着允许上传到谷歌驱动器,而无需使用任何帐户。上传功能运行良好,但我遇到很长/很长的上传问题。我试图解决这个问题,因为我需要测试令牌的到期时间。

当用户尝试上传大文件(20/30 GB)时,Auth令牌服务器过期Error Screenshot 1,然后出现此错误Error screenshot 2

所以我需要的是使用将超过5小时过期的令牌。我确实尝试使用刷新令牌,但最终我感到非常困惑。我确实在OAuth 2.0 Playground中创建了刷新令牌。

事情我已经尝试:

  1. 传递刷新令牌在setOAuthToken才能。 (被功能拒绝)
  2. 使用刷新令牌使用setOAuthToken,但失败。

问题

  1. 我可以永久授权,以选取器应用程序的访问? (因为它始终是用户访问服务器端代码的驱动器)?

  2. 我应该使用刷新令牌来获取Auth令牌吗?

原始代码:

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

afaik,拾取器不能接受刷新令牌并使用它来更新其访问令牌。这几乎可以肯定是由设计决定的,因为刷新令牌永远不应该存在于浏览器等不安全的设备上。

的唯一方法我可以建议将是: -

A 1.有一个刷新令牌的安全服务器

  • 实现自己的端点返回访问令牌使用所存储的刷新令牌
  • 乙1。使用GAPI,立即=真(或者无论你目前获得访问令牌)

  • 拥有的setTimeout/setInterval函数,其每59分钟,使用选项A获得了一次新的访问令牌或B

  • 通过查找存储访问令牌的内部属性,将其戳入Picker对象。

  • 这是非常富有和脆弱的,但我真的不能想出更好的答案。

    +0

    非常感谢,我会尝试这两种方法。 –

    +0

    您好@ponoyyid,再次感谢您的帮助。我确实试图用你的建议来解决我的问题,但我没有运气。你能解释什么是“immediate = true”吗?我还没有找到一种方法来捅入拾取器对象的新访问令牌。我可以更新令牌,但是如果已经创建/显示了Picker对象,我该如何更新呢? –

    +0

    immediate = true会导致无需任何用户界面即可进行刷新。没有发布的方法来更新创建的选取器对象的标记。这是一个设计缺陷。由于在JavaScript中,所有属性都是可访问的,即使它们是内部的,我的建议是在代码中进行挖掘,直到找到内部属性。就像我说的,真好。 – pinoyyid

    0

    建议的解决方案没有解决问题。

    我尝试使用Google表单来做同样的事情,我试着上传用于测试原始问题中描述的错误的相同文件。事实证明,我有完全相同的错误!

    所以,我认为是“作为设计工作”的情况。我已经向Google发送错误报告,我们有G Suite帐户,希望我们能收到一些反馈。但我认为不容易解决。

    谷歌表格替代方案的主要问题是,它需要一个Gmail /谷歌帐户,如果你想上传的文件大于你的免费配额,上传将失败。我正在尝试使用21 GB(上传者)和无限G Suite帐户(接收者和表单所有者)的个人帐户。

    0

    所以,

    大量的测试不同的选择后,最简单的/最快的解决方法是限制客户最多上传3个文件(因为你可以在过程的开始期间上传的时候3个文件)。当您尝试上传第4个文件时,您会收到验证错误。

    结案!

    相关问题