Ruby on rails 4 跨多个用户共享Google文档';使用驱动器API的Google驱动器(v2、Ruby客户端、Rails、iOS)

Ruby on rails 4 跨多个用户共享Google文档';使用驱动器API的Google驱动器(v2、Ruby客户端、Rails、iOS),ruby-on-rails-4,google-drive-api,Ruby On Rails 4,Google Drive Api,你好,谷歌大师和驱动API忍者 我有一个Rails应用程序,具有以下流程: 用户提交表单 在用户的驱动器中创建模板化的Google文档 该文档与其他用户共享 该文档已添加到其他用户的驱动器中 在这最后一步之前,一切都很顺利,这张简陋的海报带来了无尽的悲伤。在我看来,我的应用程序应该能够调用drive.parents.insert,其中我传递了创建时(按用户)存储的文件id,以及其他用户所需文件夹的文件夹id。遗憾的是,调用drive.parents.insert(甚至drive.files.ge

你好,谷歌大师和驱动API忍者

我有一个Rails应用程序,具有以下流程:

用户提交表单
在用户的驱动器中创建模板化的Google文档
该文档与其他用户共享
该文档已添加到其他用户的驱动器中

在这最后一步之前,一切都很顺利,这张简陋的海报带来了无尽的悲伤。在我看来,我的应用程序应该能够调用
drive.parents.insert
,其中我传递了创建时(按用户)存储的
文件id
,以及其他用户所需文件夹的
文件夹id
。遗憾的是,调用
drive.parents.insert
(甚至
drive.files.get
)返回404-file not found状态。这很糟糕,因为其他用户可以在
https://docs.google.com/document/d/#{fileId}
并且可以使用驱动器GUI提供的“添加到我的驱动器”按钮,从“与我共享”选项卡手动将文件添加到自己的驱动器中。
那么,善良的读者们,我在理解上的差距在哪里?我必须首先调用
drive.files.insert
或其他驱动器API方法吗?如果是,则
1) 我应该使用属于该用户或其他用户的新身份验证令牌来授权我的请求吗?
2) 如果我应该使用
drive.files.insert
,那么为现有文档声明insert的
媒体
部分的正确方法是什么?(
media=Google::APIClient::UploadIO…?

我非常乐意应要求提供额外的细节,尽管我怀疑这个问题在我这边是概念性的…
最佳,
-B

编辑:


创建单据的用户可以获取该文件;创建文件夹的其他用户可以获得该文件夹;我如何使这些收支平衡,以便用户可以将其文件(与其他用户共享)添加到其他用户的文件夹中,或者其他用户可以将其文件(与其他用户共享)添加到其文件夹中。再次感谢您的关注。

用适合我的解决方案回答我自己的问题:
据我所知,作用域
googleapis.com/auth/drive.file
不足以将文档从“与我共享”文件夹移动到“我的驱动器”。
也就是说,我将oAuth初始值设定项更改为:

config.omniauth :google_oauth2, '...', '...',
  {
    scope: [
      'email',
      'profile',
      'https://www.googleapis.com/auth/plus.me',
      'https://www.googleapis.com/auth/drive.file'
    ],

    access_type: 'offline',
    prompt: 'consent'
  }
致:


我在任何地方都没有发现任何文档表明这是必需的——事实上,恰恰相反,正如谷歌文档所建议的
drive.file
。业力加分给任何能将未来读者引向任何提到这一点的帮助文档的人-B

在没有看到代码的情况下,猜测404指的是文件夹。“另一个用户”是否与“一个用户”共享文件夹?另外,可能值得编辑您对用户A、用户B等的问题,并明确哪些用户看到了错误。感谢您的回复!据我所知,我的问题的解决方案是,作用域“”不足以将文档从“与我共享”文件夹移动到“我的驱动器”-一旦我将“”和“”添加到我的oAuth作用域中,事情就开始发生了。我希望我能提供一些文档的有用链接,但是,唉……如果可能的话,如果你能发布一个答案,那就太好了,因为我相信这是一种常见的情况。Drive.file是首选作用域,因此了解它的局限性总是很有用的。噢,驱动API方法调用是按照最初的预期调用
Drive.parents.insert
config.omniauth :google_oauth2, '...', '...',
  {
    scope: [
      'email',
      'profile',
      'https://www.googleapis.com/auth/plus.me',
      'https://www.googleapis.com/auth/drive',
      'https://www.googleapis.com/auth/drive.appdata',
      'https://www.googleapis.com/auth/drive.file'
    ],

    access_type: 'offline',
    prompt: 'consent'
  }