找不到404资源:使用Google Directory API的域

时间:2014-05-20 19:08:59

标签: ruby google-admin-sdk google-directory-api

我跟着快速启动并尝试使用google-api-ruby-client创建用户。

我已在google api控制台中设置了访问权限。我可以使用API​​资源管理器来实现这一点。

但是当我尝试使用ruby客户端时,我找不到资源:域错误。

以下是代码:

def self.create_user

# Initialize the client.
client = Google::APIClient.new(
  :application_name => 'MYAPP',
  :application_version => '0.0.1'
)

# Authorization
# Load our credentials for the service account
key = Google::APIClient::KeyUtils.load_from_pkcs12(KEY_FILE, KEY_SECRET)

client.authorization = Signet::OAuth2::Client.new(
  token_credential_uri: 'https://accounts.google.com/o/oauth2/token',
  audience: 'https://accounts.google.com/o/oauth2/token',
  scope: 'https://www.googleapis.com/auth/admin.directory.user',
  issuer: ACCOUNT_ID,
  signing_key: key)

# Request a token for our service account
client.authorization.fetch_access_token!

# Load API Methods
admin = client.discovered_api('admin', 'directory_v1')

# Make an API call.
result = client.execute(
   admin.users.update,
    name: { familyName: 'testy', givenName: 'testerson' },
     password: '!password12345!',
     primaryEmail: 'ttesterson@my-actual-domain.com'
)

result.data

以下是回复:

"error"=>{"errors"=>[{"domain"=>"global", "reason"=>"notFound", "message"=>"Resource Not Found: domain"}], "code"=>404, "message"=>"Resource Not Found: domain"}

为什么?

1 个答案:

答案 0 :(得分:0)

在阅读了一些文档之后,我需要解决两件事。

  1. 我没有为我的测试服务帐户设置正确的授权。
  2. 您必须转到Apps Console > Security > Advanced > Manage API client access并为您的服务帐户添加客户端网址以及您要添加的任何特定权限

    1. 正如这个问题所示,您似乎需要创建一个用户对象,而不仅仅是传递参数。
    2. 这是我更新的代码:

      # Authorization happens here ....
      
      api = client.discovered_api('admin', 'directory_v1')
      new_user = api.users.insert.request_schema.new(
          name: { familyName: 'Testy', givenName: 'Testerson' },
          primaryEmail: 'ttttesterson@<domain-redacted>.com',
          password: 'password123'
       )
      
        result = client.execute(
          api_method: api.users.insert,
          body_object: new_user
       )