0

我正在尝试根据 Google Admin SDK 文档使用 externalId 更新用户。

UserExternalId externalId = new UserExternalId();
    externalId.setType( "account" );
    externalId.setValue( "test" );
    User user = new User();
    user.setExternalIds( externalId );
    try {
        User update = directory.users().update( "USERKEY", user ).execute().setExternalIds( externalId );
        LOGGER.info("Response from google: " + update.toPrettyString());
        User full = directory.users().get( "USERKEY" ).setProjection( "full" ).execute();
        LOGGER.info( "Response from new get user: " + full.toPrettyString() );
    } catch (IOException e) {
        LOGGER.info("Error: " + e);
    }

在更新调用上记录响应时,我可以看到 externalId 已填写并且没有引发错误。当我尝试获取同一个用户时,没有任何 externalId 的踪迹。

当我使用 Google 的API 资源管理器并在那里填写 ExternalId 时,我得到了相同的行为。看起来 Google API 正在接受更新请求,但忽略了 ExternalId。向用户添加 externalId 的正确方法是什么?

编辑:

SGC 的回答帮助了我。setExternalIds 方法需要一个 ExternalIds 列表,我忘了这样做。Google Java Directory API 在获取 externalIds 时似乎返回了一个 json 对象,因此需要对其进行解析才能读取它。

4

1 回答 1

1

更新用户的外部 id 时,如果 JSON 设置不正确,则不会保存(尽管它会给出 200 响应)。如果您尝试向该用户发送获取请求,则在响应中看不到更新的值。

尝试使用“ Oauth Playground ”发送请求,您可以在发送请求时构建 JSON。

我尝试在“Users.update”请求中使用 {"externalIds":[{"value":"shaggynetwork","type":"network"}]}。在“Users.get”中,响应是:

HTTP/1.1 200 OK
Content-type: application/json; charset=UTF-8
{
  "externalIds": [
   {
     "type": "network", 
      "value": "shaggynetwork"
}

],

脚步:

  1. 点击https://developers.google.com/oauthplayground/

  2. 在第 1 步中,在“Authorize APIs”左侧的空白处给出https://www.googleapis.com/auth/admin.directory.user,然后点击“Authorize APIs”。

3.在第2步中,点击“兑换代币”

  1. 在第 3 步中,选择 HTTP 方法:PUT,给出请求 URI 值:https ://www.googleapis.com/admin/directory/v1/users/userKey (giver userkey value)。

5.点击“进入请求正文”,构建json:

{"externalIds":[{"value":"shaggynetwork","type":"network"}]}

6.点击“发送请求”。

在文档中,不清楚如何更新外部 ID。

如果您需要任何帮助,请告诉我。

于 2015-01-09T18:28:07.763 回答