pru*_*iap 5 ruby google-api-client google-drive-api ruby-on-rails-4
首先我的问题是关于使用我的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'
Run Code Online (Sandbox Code Playgroud)
我坚持认证/授权步骤,我对此感到相当愚蠢.
在GitHub库的API,因此示例代码在这里,或谷歌开发站点这里使我相信这个工程.
require 'google/apis/drive_v2'
Drive = Google::Apis::DriveV2 # Alias the module
drive = Drive::DriveService.new
drive.authorization = authorization # See Googleauth or Signet libraries
Run Code Online (Sandbox Code Playgroud)
要么
drive.authorization = Google::Auth.get_application_default([Drive::AUTH_DRIVE])
Run Code Online (Sandbox Code Playgroud)
当然什么是授权?根据该文档,我去这里.
运行以下示例代码:require'googleauth'
scopes = ['https://www.googleapis.com/auth/cloud-platform', 'https://www.googleapis.com/auth/compute']
authorization = Google::Auth.get_application_default(scopes)
Run Code Online (Sandbox Code Playgroud)
导致:
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'
Run Code Online (Sandbox Code Playgroud)
可能是由于我的困惑或愚蠢.
上面链接的google开发者网站文档中显示的另一种方法和服务帐户似乎也就是这里的方式.
但没有任何作用.我也见过这些client_secrets的一小部分
client_secrets = Google::APIClient::ClientSecrets.load
authorization = client_secrets.to_authorization
Run Code Online (Sandbox Code Playgroud)
当然.load打破了它自己,因为它需要一个神奇的文件路径或文件名,但我没有给它任何工作
任何示例代码允许我使用我的client_secret用于服务帐户或oauth2(网络应用程序),但没有任何花哨的重定向将是太棒了,真的很有帮助..
现在对于google api的新用户,请阅读以下内容.我觉得我因为没有看到这个或者注意到它而愚蠢但是当我在github repo上提出问题时,这个信息可以帮助你们我很困惑.
显然,用于ruby的google API客户端与<0.9pre1或更高版本完全不同.文档也是如此.
因此,如果您正在阅读此类代码并正在阅读这些文档:
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
Run Code Online (Sandbox Code Playgroud)
然后你正在使用<0.9pre1(我很确定)
否则你会看到我上面的代码与drive_v2,然后删除你的google_drive宝石,因为它已经汇总到一个api并阅读此文档.
我希望这有助于其他人.
以及有关我的身份验证问题的任何帮助,包括使用service vs api和其他类型的帐户以及一些示例代码进行身份验证,然后使用刷新令牌进行身份验证.太棒了.
小智 5
我刚遇到同样的问题 - 我还没有完全解决它,但我通过设置GOOGLE_APPLICATION_CREDENTIALS环境变量并将其指向服务帐户密钥文件来克服此特定错误- 这与client_secrets不同适用于早期版本的API.
谷歌在其文档中的说明:应用程序默认凭据:它们如何工作解决了这个问题,但重要的是"服务帐户"是与client_secrets不同的身份验证方法.
首先,转到项目的Developers Console API凭据页面,然后选择现有/创建新的"服务帐户密钥".假设我们已将下载的.json文件放在/path/to/svc_acct_auth.json中
在您的ruby代码中,添加以下行:
ENV["GOOGLE_APPLICATION_CREDENTIALS"] = '/path/to/svc_acct_auth.json'
这应该让服务正确返回并让你超过运行时错误.当然,我仍然无法通过这个身份验证系统执行我需要的呼叫,但是嘿!我已经毕业了更新更好的错误消息.
我在 Windows 操作系统上运行并遇到了这个问题。事实证明,用于检测操作系统的 ruby auth 库中存在错误。
https://github.com/google/google-auth-library-ruby/issues/55
如果您直接或间接通过 google-api-client 获取最新版本的 googleauth gem,您将获得修复。
| 归档时间: |
|
| 查看次数: |
1251 次 |
| 最近记录: |