Обновление пользователя с помощью каталога администратора Google API возвращает 200, но не обновляет.Неверное тело запроса? - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть пользователь в моей консоли администратора Google с адресом электронной почты dog@jopfre.com.Я могу успешно авторизоваться и добавлять и удалять пользователей, используя API.Сейчас я пытаюсь обновить пользователя с помощью API.Вот упрощенная версия моего кода:

  const admin = google.admin({version: 'directory_v1', auth});
  admin.users.update({
    userKey: "dog@jopfre.com",
    requestBody: {
      primaryEmail: "cat@jopfre.com"  
    }
  },(err, data) => {
    console.log(err || data);
  });

Возвращает json запроса и статус 200.

Ближайший пример, который я могу найти в документации это:

admin.members.insert({
    groupKey: 'my_group@example.com',
    requestBody: { email: 'me@example.com' },
    auth: jwt
  }, (err, data) => {
    console.log(err || data);
  });

Так что это выглядит очень похоже на меня.Я пытался с кавычками и без кавычек на ключе requestBody, а также пытался обновить различные значения ключа, такие как givenName и suspended.Я предполагаю, что мой запрос каким-то образом искажен, но я не могу понять, как не возвращается ошибка.Любая подсказка или идеи, что попробовать дальше?Вот некоторые из наиболее релевантных строк из возвращенного json:

status: 200,
params: { requestBody:  { primaryEmail: 'cat@jopfre.com' } },
_hasBody: true,
header: 'PUT /admin/directory/v1/users/dog@jopfre.com?requestBody%5BprimaryEmail%5D=cat%40jopfre.com HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nContent-Type: application/x-www-form-urlencoded\r\nAuthorization: Bearer ya29.GlwXBi796knRrOTbzvJ1ihzBaQqHKk3HYA9-3pxUgCxaCvPKxZLYGRrghq_RcFHbZYqyKEqUV6yOWusBui2Vh1DLd50MsKQ5o4MoqzutVr8P280ULY2cYzSYLtGOyw\r\nUser-Agent: google-api-nodejs-client/1.6.1\r\nHost: www.googleapis.com\r\nConnection: close\r\nContent-Length: 0\r\n\r\n',
path: '/admin/directory/v1/users/dog@jopfre.com?requestBody%5BprimaryEmail%5D=cat%40jopfre.com',
responseUrl: 'https://www.googleapis.com/admin/directory/v1/users/dog@jopfre.com?requestBody%5BprimaryEmail%5D=cat%40jopfre.com',
_requestBodyLength: 0,

Не уверен, что requestBodyLength должен быть равен 0, что кажется отключенным.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Эффективный выпуск googleapis версии 30.0.0 resource и requestBody в равной степени принимаются.Ниже приведены рабочие примеры для функций users.insert, users.list, users.update, users.get и users.delete, все они протестированы с googleapis версия 30.0.0

async function insertUser(auth) {
    const service = google.admin({version: 'directory_v1', auth});
    console.log("Inserting user");
    const response = await service.users.insert({
    "requestBody":{
        "name": {
        "familyName": "Friends",
        "givenName": "John Smith",
        },
        "password": "**********",
        "primaryEmail": "j.smith@jopfre.com",
    }
    })
    // Log the results here.
    console.log(`status: ${response.status}\nprimary email: ${response.data.primaryEmail}\nupdated familyName: ${response.data.name.fullName}`)
    console.log("\n"); // insert a line break.
}

async function listUsers(auth) {
    console.log('Listing users')
    const service = google.admin({version: 'directory_v1', auth});
    const response  = await service.users.list({
        customer: 'my_customer',
        maxResults: 150,
        orderBy: 'email',
    })
    const users = response.data.users;
    if (users.length) {
        console.log('Users:');

        users.forEach((user) => {
            console.log(`${user.primaryEmail} -(${user.name.fullName})`);
        });
    } else {
        console.log('No users found.');
    }
    console.log("\n"); // insert a line break.
}

async function updateUserInfo(auth) {
    console.log('Updating user info')
    const service = google.admin({version: 'directory_v1', auth});
    const response = await service.users.update({
        "userKey": "j.smith@jopfre.com",
        "requestBody": {
        "name": {
            "familyName": "Work"
            },
        "primaryEmail": "john.smith@jopfre.com"
        }
    })
    // Log the results here.
    console.log('User info is updated successfully')
    console.log(`status: ${response.status}, prime email: ${response.data.primaryEmail} updated familyName: ${response.data.name.familyName}`)
    for (i = 0; i < response.data.emails.length; i++) {
        console.log(`address: ${response.data.emails[i]["address"]}`)
    }
    console.log("\n"); // insert a line break.
}

async function getUserMeta(auth) {
    console.log('Getting user info')
    const service = google.admin({version: 'directory_v1', auth});
    const response = await service.users.get({
        "userKey" : "j.smith@jopfre.com"
    })
    console.log('User info is obtained successfully')
    console.log(`primary email: ${response.primaryEmail}, full name: ${response.data.name.fullName}`)
    console.log("\n"); // insert a line break.
}

async function deleteUser(auth) {
    console.log('Deleting user')
    const service = google.admin({version: 'directory_v1', auth});
    const response =  await service.users.delete({
        "userKey" : "j.smith@jopfre.com"
    })
    if (response.data == "") {
        console.log("User is deleted successfully");
    }
}
0 голосов
/ 14 сентября 2018

Использование resource вместо requestBody работает в v33.0.0 googleapis.

 const admin = google.admin({version: 'directory_v1', auth});
  admin.users.update({
    userKey: "dog@jopfre.com",
    resource: {
      primaryEmail: "cat@jopfre.com"  
    }
  },(err, data) => {
    console.log(err || data);
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...