使用google admin目录api更新用户将返回200,但不会更新.请求正文格式错误? [英] Update user using google admin directory api returns 200 but does not update. Malformed request body?

查看:65
本文介绍了使用google admin目录api更新用户将返回200,但不会更新.请求正文格式错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的Google管理控制台中有一个用户,电子邮件为dog@jopfre.com.我可以成功进行身份验证,并使用api添加和删除用户.现在,我正在尝试使用api更新用户.这是我的代码的简化版本:

I have a user in my google admin console with the email dog@jopfre.com. I can auth successfully and add and delete users using the api. Now I am trying to update the user using the api. Here is a simplified version of my code:

  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状态.

This returns json of the request and a 200 status.

我能找到的最接近的示例 是这样的:

The nearest example I can find in the docs is this:

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中一些更相关的行:

So it looks pretty similar to me. I have tried with and without quotation marks on the requestBody key and have also tried updating different key values like givenName and suspended. I'm guessing my request is malformed somehow but I can't work out how as no error is returned. Any clue or ideas of what to try next? Here are some of the more relevant lines from the returned 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,这似乎不正确.

Not sure if the requestBodyLength should be 0, that seems off.

推荐答案

googleapis 30.0.0版的有效发行版 resource requestBody 是同样被接受.以下是 users.insert users.list users.update users.get users.delete 函数,均已通过 googleapis 30.0.0版

Effective release of googleapis version 30.0.0 resource and requestBody are equally accepted. Below are working examples for users.insert, users.list, users.update, users.get and users.delete functions, all tested with googleapis version 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");
    }
}

这篇关于使用google admin目录api更新用户将返回200,但不会更新.请求正文格式错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆