Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Google Drive API在尝试下载文件时返回403-未提供有关错误的信息_Ruby On Rails_Ruby_Google Drive Realtime Api_Google Drive Api - Fatal编程技术网

Ruby on rails Google Drive API在尝试下载文件时返回403-未提供有关错误的信息

Ruby on rails Google Drive API在尝试下载文件时返回403-未提供有关错误的信息,ruby-on-rails,ruby,google-drive-realtime-api,google-drive-api,Ruby On Rails,Ruby,Google Drive Realtime Api,Google Drive Api,因此,我有一个ruby on rails项目,我正在使用google api gem,我正在尝试从一个帐户下载一个文件,我以前曾授予我的项目访问和管理我的google驱动器文件的权限。我有刷新令牌和访问令牌,在一段时间内,下载工作正常。出于某种原因,在access_令牌过期之后,即使在我使用刷新从API请求一个新的令牌(这确实有效)之后,下载请求返回一个403错误,并且没有关于403错误的任何信息 第一:为什么在刷新access_令牌之后,我仍然收到403错误? 第二:为什么响应不返回有关错误的

因此,我有一个ruby on rails项目,我正在使用google api gem,我正在尝试从一个帐户下载一个文件,我以前曾授予我的项目访问和管理我的google驱动器文件的权限。我有刷新令牌和访问令牌,在一段时间内,下载工作正常。出于某种原因,在access_令牌过期之后,即使在我使用刷新从API请求一个新的令牌(这确实有效)之后,下载请求返回一个403错误,并且没有关于403错误的任何信息

第一:为什么在刷新access_令牌之后,我仍然收到403错误? 第二:为什么响应不返回有关错误的任何信息

仅供参考,如果我进入我的帐户,取消对应用程序的授权,然后通过我的应用程序再次授权,下载将再次正常工作

我真的需要帮助,因为如果它不起作用,这会破坏我的整个项目

编辑:再次尝试查看问题是否仍在发生。我昨天删除了我的帐户,再次授予了管理文件的权限,它一直工作到访问令牌过期。之后,即使在使用刷新令牌更新访问令牌之后,也会给出403错误消息。下面是我从client.execute(客户端密钥和密码已编辑)获得的信息:

谷歌API的回应:#“16653014193614665626”,“e”=>“下载”,“gd”=>“真”},@headers={“用户代理”=>“谷歌API ruby客户端/0.7.1 Linux/3.13.0-24-generic\n(gzip)”,“接受编码”=>“gzip”,“内容类型”=>“},@API\u方法=nil,@authenticated=nil,@authorization=#https://accounts.google.com/o/oauth2/auth>,@token\u-credential\u-uri=#https://accounts.google.com/o/oauth2/token>,@expiry=60,@extension_parameters={},@extension_parameters={},@client_id=“***.apps.googleusercontent.com”,@client_secret=“***”,@scope=[”,“”],@access_-token=“***”,@refresh_-token=“***”,@body=”“,@http_-method=:get,@uri=.\35;>,@response=\request=\request\u头={“用户代理”=>“谷歌api ruby客户端/0.7.1 Linux/3.13.0-24-generic\n(gzip)”,“接受编码”=>“gzip”,“内容类型”=>,“授权”=>“承载器*,“缓存控制”=>“无存储”}@ssl=#@response\u头={“访问控制允许源”=>“*,“访问控制允许凭据”=>“假”,“访问控制允许头”=>”Accept,Accept Language,Authorization,Cache Control,Content Disposition,Content Encoding,Content Language,Content Length,Content-MD5,Content-Range,Content-Type,Date,GData Version,Host,If-Match,If-Modified-Since,If-None-Match,If-Unmodified-Since-Since,OriginToken,Pragma,Range,Slug,Transfer-Encoding,X-ClientDetails,X-GData-C客户机,X-GData-Key,X-Goog-AuthUser,X-Goog-PageId,X-Goog-Encode-Response-If-Executable,X-Goog-Correlation-Id,X-Goog-Request-Info,X-Goog-Experiments,X-Goog-iam-role,X-Goog-iam-authorization-token,X-Goog-Upload-Command,X-Goog-Upload-Upload-Content-Length,X-Goog-Upload-Upload-Content-Type-文件名,X-Goog-Upload-Offset,X-Goog-Upload-Protocol,X-Goog-Visitor-Id,X-HTTP-Method-Override,X-JavaScript-User-Agent,X-Pan-Versionid,X-Origin,X-Referer,X-Upload-Content-Length,X-Upload-Content-Type,X-Use-HTTP-Status-Code-Override,X-YouTube-VVT,X-YouTube-Page-CL,X-YouTube-Page-Timestamp,“访问控制允许方法”=>“获取,选项“,”日期“=>”2014年8月20日星期三13:13:22 GMT“,”过期“=>”2014年8月20日星期三13:13:22 GMT“,”缓存控制“=>”私有,最大年龄=0“,”服务器“=>”上传服务器(\”构建于2014年8月12日13:30:28(1407875428)\”,”内容长度“=>”0“,”内容类型“=>”文本/html;字符集=UTF-8“,”备用协议“=>”443:quic“,”连接“=>”关闭“,”状态=403>>


在分析响应并查找要隐藏的内容(如access_令牌)后,是否可能“access control allow methods”参数的日期和过期日期与此相同?403错误表示您没有所需的权限,在这种情况下,您试图使用过期的令牌,听起来您的cookie策略有问题,请将cookie策略更改为“无”,如果问题消失,请通知我们


快乐编码

下载的URL似乎直接连接到访问令牌。通过存储第一次访问文件元数据的下载URL,并使用相同的下载URL和新的访问令牌,API返回403错误。通过在每次请求新令牌时请求一个新的downloadUrl,它可以完美地工作。

跟踪http流量,您将看到有关403的其他信息。当您执行此操作时,请仔细检查您的http请求是否确实包含来自内存的访问令牌,403的一个可能原因是缺少访问令牌。如果流量都已加密,我该如何执行此操作?我正在查看wireshark上的流量,似乎找不到403在哪里。您需要启用SDK库中的日志记录。我不使用rails,所以不能说得更具体,但我会为你准备一个谷歌,如果我找到它,会发表评论。这可能会帮助你找到它,但我无法让它工作。我将代码行放在实际建立连接的函数上,第一次使用它时,我遇到了某种中间件错误。我将代码行移动到上一个方法,错误停止,但控制台或任何日志中都没有任何内容:(我绝对确定发送到头上的令牌是新的,而不是过期的。贝塞斯,过期令牌的错误是401而不是403。不过,我将尝试您提出的解决方案…尽管我不确定如何执行。您能帮我吗?谢谢。我没有忘记您,只是需要更深入地查看您的案例=)在这里,我发现有人在您的客户端的访问令牌中发现了一个bug,似乎您应该使用稍旧的版本。在这里他写了一篇文章详细描述了他是如何成功的,