加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 谷歌/ apis / drive_v2认证新谷歌驱动器身份验证.我也希

发布时间:2020-12-17 03:24:40 所属栏目:百科 来源:网络整理
导读:首先我的问题是关于使用我的rails 4.2 app获取谷歌drive_v2身份验证和创建新文件等.我有使用devise / omniauth2的rails应用程序和谷歌工作正常.我在google开发者控制台中激活了web auth和google API身份验证.两个客户端机密都已下载并正常工作. 所以说了.我
首先我的问题是关于使用我的rails 4.2 app获取谷歌drive_v2身份验证和创建新文件等.我有使用devise / omniauth2的rails应用程序和谷歌工作正常.我在google开发者控制台中激活了web auth和google API身份验证.两个客户端机密都已下载并正常工作.

所以说了.我需要离线访问我的rails应用程序才能使用,创建和删除goole Docs和Spreadsheets.我已经设置了.drive的范围,设置了离线访问等.

如果我进入谷歌游乐场并获得一个新的访问令牌,我甚至编写了可以正常工作的代码.

我的第一个问题是能够使用google-api-client获取我的refresh_token并进行身份验证或获取新版本(版本0.9pre3,这样人们就不会感到困惑)

为了使用新的谷歌API我需要评论谷歌驱动器,因为它似乎所有的API组合到客户端.

gem 'omniauth-google-oauth2'
#gem 'google_drive'
gem 'google-api-client','0.9.pre3'

我坚持认证/授权步骤,我对此感到相当愚蠢.

因此,api here或google开发站点here的github repo上的示例代码让我相信这是有效的.

require 'google/apis/drive_v2'

Drive = Google::Apis::DriveV2 # Alias the module
drive = Drive::DriveService.new
drive.authorization = authorization # See Googleauth or Signet libraries

要么

drive.authorization = Google::Auth.get_application_default([Drive::AUTH_DRIVE])

当然什么是授权?根据文件我去here.

运行以下示例代码:
要求’googleauth’

获取环境配置的授权

scopes =  ['https://www.googleapis.com/auth/cloud-platform','https://www.googleapis.com/auth/compute']
authorization = Google::Auth.get_application_default(scopes)

导致:

authorization = Google::Auth.get_application_default(scopes)
RuntimeError: Could not load the default credentials. Browse to
https://developers.google.com/accounts/docs/application-default-credentials
for more information
from /Users/prussiap/.gem/ruby/2.2.0/gems/googleauth-0.4.2/lib/googleauth.rb:116:in `get_application_default'

可能是由于我的困惑或愚蠢.

上面链接的google开发者网站文档中显示的另一种方法和服务帐户似乎也就是here的方式.

但没有任何作用.我也见过这些client_secrets的一小部分

client_secrets = Google::APIClient::ClientSecrets.load
authorization = client_secrets.to_authorization

当然.load打破了它自己,因为它需要一个神奇的文件路径或文件名,但我没有给它任何工作

任何示例代码允许我使用我的client_secret用于服务帐户或oauth2(网络应用程序),但没有任何花哨的重定向将是太棒了,真的很有帮助..

现在对于google api的新用户,请阅读以下内容.我觉得我因为没有看到这个或者注意到它而愚蠢但是也许这些信息可以帮助你们当我在github repo上提出issue时我很困惑.

显然,用于ruby的google API客户端与<完全不同.然后0.9pre1或更大.文档也是如此. 因此,如果您正在阅读此类代码并正在阅读这些代码docs:

require 'google/api_client'
require 'google/api_client/client_secrets'
require 'google/api_client/auth/installed_app'
require 'google/api_client/auth/storage'
require 'google/api_client/auth/storages/file_store'
require 'fileutils'

APPLICATION_NAME = 'Drive API Quickstart'
CLIENT_SECRETS_PATH = 'client_secret.json'
CREDENTIALS_PATH = File.join(Dir.home,'.credentials',"drive-quickstart.json")
SCOPE = 'https://www.googleapis.com/auth/drive.metadata.readonly

然后你正在使用< 0.9pre1(我很确定) 否则,你会看到我上面的代码与drive_v2,然后删除你的google_drive宝石,因为它被归为一个api并阅读this doc.

我希望这有助于其他人.

以及有关我的身份验证问题的任何帮助,包括使用service vs api和其他类型的帐户以及一些示例代码进行身份验证,然后使用刷新令牌进行身份验证.太棒了.

解决方法

我刚遇到同样的问题 – 我还没有完全解决它,但我通过设置GOOGLE_APPLICATION_CREDENTIALS环境变量并将其指向服务帐户密钥文件来克服此特定错误 – 这与client_secrets不同适用于早期版本的API.

Google在其文档中的说明:Application Default Credentials: How They Work将其解决了,但重要的是“服务帐户”是与client_secrets不同的身份验证方法.

首先,转到项目的Developers Console API Credentials页面并选择现有/创建新的“服务帐户密钥”.假设我们已将下载的.json文件放在/path/to/svc_acct_auth.json中

在您的ruby代码中,添加以下行:

ENV [“GOOGLE_APPLICATION_CREDENTIALS”] =’/ path / to /svc_acct_auth.json’

这应该让服务正确返回并让你超过运行时错误.当然,我仍然无法通过这个身份验证系统执行我需要的呼叫,但是嘿!我已经毕业于更新的&更好的错误消息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读