我没有登录谷歌驱动器时使用谷歌驱动器api打开谷歌驱动器文件

时间:2014-11-17 23:03:48

标签: node.js sails.js orientdb google-drive-api

这一直困扰着我一段时间,所以任何帮助确认或肯定这一点非常感谢!这也是我第一次真正发布一个问题,尽管长期以来一直在发展:)

所以我有一个与Google Drive API集成的nodejs应用程序,我希望用户授权多个Google云端硬盘帐户,并且能够查看和打开(通常只是与他们添加的帐户中的所有文件进行交互)。 / p>

我使用最高可用范围授权我的应用:https://www.googleapis.com/auth/drive并且因为我不希望用户在access_token用完时再次登录所以我还包括approval_prompt: "force"和` `access_type:“离线”`当我请求访问令牌时。

一切都很好 - 我很好地授权,我可以删除文件,我可以打开它们,我可以分享它们,我可以下载它们。除了一件事: 如果我授权horse@gmail.com然后beaver@gmail.com。然后,我仍然可以从两个帐户中删除,共享,下载和预览文件。但我只是无法打开 horse@gmail.com 中的文档进行编辑(因为beaver@gmail.com已在我的本地计算机上登录)。我能做的最好的事情就是让它向我显示文档,并在屏幕的右上角登录正确的帐户,但要求我使用按钮登录。当我点击按钮时,它只是刷新并给我相同的消息和相同的屏幕。

我尝试的是:

  1. 只需将用户重定向到API
  2. 中的文件资源alternateLink即可
  3. 获取alternateLink并将access_token附加到其中,然后将用户重定向到该open: function(req,res,next){ var link = req.param("link"); var uid = req.param("uid"); orientdb.select().from('Account').where({uid: uid}).one() .then(function(account){ var URL = link + "&access_token=" + account.tokens.access_token; res.redirect(URL); }); } 。 (还有很多其他随机的东西我找到了各种不起作用的地方)。
  4. 在这两种情况下,我都尝试从所有Google帐户退出。

    现在,我检查了几个类似于Jollicloud和Odrive的网络服务。但是,它们似乎都强制用户登录谷歌访问文件。

    您是否可以使用删除和下载等用户文件执行各种疯狂的操作,但是您无法在Google文档自己的应用中打开它们?

    不完全确定我应该添加哪种代码来向您展示我所拥有的代码。但这里有一些。这是我的开放行动(当用户点击文件并希望在Google Docs / Sheet /等中打开文件时会发生什么情况。)(orientdb的原因是因为我们正在使用OrientDB图形数据库 - 它只是取一个我们存储令牌的帐户)。链接是文件的链接属性(见下文):

                name : Hummer2             
             service : Gdrive              
                kind : Google Doc          
             created : Nov 17, 2014        
             changed : Nov 17, 2014        
               users : [MB]                
                 uid : mrb@flowtale.com    
             childID : <FILE.ID>
         exportLinks : {DOCX=https://docs.google.com/feeds/download/documents/export/Export?id=<FILE.ID>&exportFormat=docx, Open Office doc=https://docs.google.com/feeds/download/documents/export/Export?id=<FILE.ID>&exportFormat=odt, Rich text=https://docs.google.com/feeds/download/documents/export/Export?id=<FILE.ID>&exportFormat=rtf, HTML=https://docs.google.com/feeds/download/documents/export/Export?id=<FILE.ID>&exportFormat=html, Plain text=https://docs.google.com/feeds/download/documents/export/Export?id=<FILE.ID>&exportFormat=txt, PDF=https://docs.google.com/feeds/download/documents/export/Export?id=<FILE.ID>&exportFormat=pdf}
           usernames : [<ARRAY OF USERNAMES ASSOCIATED WITH THIS FILE>]
          in_hasFile : User#11:0{out_hasFile:[size=2237],out_hasAccount:[size=4],username:null,email:h@h.com,password:<SOME ENCRYPTED PASSWORD>} v2244
       out_belongsTo : Account#12:3{in_belongsTo:[size=6],type:Gdrive,uid:<SOME UID>,tokens:{access_token=<OUR ACCOUNT ACCESS TOKEN>, token_type=Bearer, refresh_token=<OUR ACCOUNT REFRESH TOKEN>, expiry_date=1416258913290},rootFolderID:<ROOT FOLDER ID>,email:<THE ACCOUNT EMAIL>,filesCached:2,usersCached:2,job:4,in_hasAccount:#11:0} v15
    
    in_folderContains : File#13:20495{out_folderContains:[size=2],name:Testhest,service:Gdrive,kind:folder,created:Oct 12, 2014,changed:Oct 12, 2014,users:[1],link:https://docs.google.com/a/flowtale.com/folderview?id=<FOLDER.ID>&usp=drivesdk,uid:mrb@flowtale.com,childID:<FOLDER.ID>,exportLinks:{},usernames:[1],parents:[1],in_hasFile:#11:0,out_belongsTo:#12:3,in_folderContains:#13:13891} v36
                link : https://docs.google.com/a/flowtale.com/document/d/<FILE.ID>/edit?usp=drivesdk
    

    这是我们数据库中的示例文件文档(我用描述性替换了所有妥协数据

    ODocument - 类:文件ID:#13:20499 v.6

    {{1}}

    期待听到有人可以帮助我或者之前有过这样的经历。

    谢谢!

1 个答案:

答案 0 :(得分:0)

API允许您在云端硬盘帐户中执行多项操作。我无法使用我未授予其他帐户权限的文件重现您提及的行为。

通过OAuth流程进行身份验证后,您只会将权限授予创建OAuth请求的应用程序。如果不通过GDocs手动打开文件,则无法编辑文件的内容。因此,当浏览器打开AlternateUrl时,它将要求您登录该帐户,以便访问该文件。