我是不是需要为以下谷歌驱动器范围提交验证请求才能从选择器下载文件?

Posted

技术标签:

【中文标题】我是不是需要为以下谷歌驱动器范围提交验证请求才能从选择器下载文件?【英文标题】:Do i require to Submit a verfication request for the following google drive scopes in order to download a file from picker?我是否需要为以下谷歌驱动器范围提交验证请求才能从选择器下载文件? 【发布时间】:2017-07-03 07:22:54 【问题描述】:

我是否需要为以下谷歌驱动器范围提交验证请求才能从选择器下载文件?

googleapis.com/auth/drive www.googleapis.com/auth/drive.readonly

由于以下错误,选择器无法加载

我的目标是将文件从谷歌驱动器下载到我们的网站。

当我使用 drive.file 时,选择器会加载,但是当我尝试下载文件时,我得到一个 404 文件未找到错误。

使用 google drive reference files/get on there site 我可以模拟 404 但如果我将范围更改为仅使用 drive 或 drive.readonly 我会得到 200 状态,这是我所追求的,但选择器没有加载。

有没有无需提交验证申请表的解决方法?

我使用的代码是基于谷歌驱动示例代码。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>Google Picker Example</title>

    <script type="text/javascript">

      // The Browser API key obtained from the Google Developers Console.
      var developerKey = '';

      // The Client ID obtained from the Google Developers Console. Replace with your own Client ID.
      var clientId = ""

      // Scope to use to access user's photos.
      var scope = ['https://www.googleapis.com/auth/drive'];

      var pickerApiLoaded = false;
      var oauthToken;

      // Use the API Loader script to load google.picker and gapi.auth.
      function onApiLoad() 
        gapi.load('auth', 'callback': onAuthApiLoad);
        gapi.load('picker', 'callback': onPickerApiLoad);
      

      function onAuthApiLoad() 
        window.gapi.auth.authorize(
            
              'client_id': clientId,
              'scope': scope,
              'immediate': false
            ,
            handleAuthResult);
      

      function onPickerApiLoad() 
        pickerApiLoaded = true;
        createPicker();
      

      function handleAuthResult(authResult) 
        if (authResult && !authResult.error) 
          oauthToken = authResult.access_token;
          createPicker();
        
      

      // Create and render a Picker object for picking user Photos.
      function createPicker() 
  			var view = new google.picker.DocsView();
			  view.setIncludeFolders(true);
        
        if (pickerApiLoaded && oauthToken) 
          var picker = new google.picker.PickerBuilder().
              addView(view).
              setOAuthToken(oauthToken).
              setDeveloperKey(developerKey).
              setCallback(pickerCallback).
              build();
          picker.setVisible(true);
        
      

      // A simple callback implementation.
      function pickerCallback(data) 
        debugger;
        var url = 'nothing';
        var id = "";
        if (data[google.picker.Response.ACTION] == google.picker.Action.PICKED) 
          var doc = data[google.picker.Response.DOCUMENTS][0];
          url = doc[google.picker.Document.URL];
          id = doc[google.picker.Document.ID];
        
        
        
        var accessToken = gapi.auth.getToken().access_token;
				var xhr = new XMLHttpRequest();
				var url = "https://www.googleapis.com/drive/v3/files/" + id + "?alt=media";
		    xhr.open('GET', url);
		    xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken);	
				
				xhr.send();
				
        
        //var message = 'You picked: ' + url;
        //document.getElementById('result').innerHTML = message;
      
      
      
    </script>
  </head>
  <body>
    <div id="result"></div>

    <!-- The Google API Loader script. -->
    <script type="text/javascript" src="https://apis.google.com/js/api.js?onload=onApiLoad"></script>
  </body>
</html>

【问题讨论】:

【参考方案1】:

你没有在变量选择器中设置范围

      var picker = new google.picker.PickerBuilder().
          addView(view).
          addView(google.picker.ViewId.DOCS).//<== add this

【讨论】:

抱歉回复晚了,但我这样做了,效果很好。非常感谢。【参考方案2】:

首先,我建议使用https://www.googleapis.com/auth/drive 来获得完整的范围。然后,给我们看一下代码,你是怎么做的?

【讨论】:

感谢@Danee,我已经编辑了我的帖子以显示我正在使用的示例代码。我已经全面尝试过,我遇到了同样的问题。

以上是关于我是不是需要为以下谷歌驱动器范围提交验证请求才能从选择器下载文件?的主要内容,如果未能解决你的问题,请参考以下文章

请求的身份验证范围不足。使用谷歌日历和 laravel 5.8

要求用户在提交表单之前点击谷歌的新验证码

应用程序包 ID 是不是需要域才能提交到应用商店?

谷歌 BigQuery 身份验证

使用 pydrive 从 OAUTH 游乐场谷歌实现访问令牌

谷歌colaboratory和谷歌云之间的接口