use*_*093 12 python google-api google-api-python-client google-admin-sdk
我一直在阅读有关如何更新用户自定义属性的文档.从如何编写,似乎我将能够做到以下几点:
email = "a@a.com"
results = service.users().list(domain="a.com",projection="full",query='email={0}'.format(email)).execute()
if len(results["users"]) == 1:
user = results["users"][0]
user["customSchemas"]["TEST"] = "TEST"
try:
userResponse = service.users().update(userKey=email, body=user).execute()
except HttpError, e:
print(e)
Run Code Online (Sandbox Code Playgroud)
但是,我抛出了错误:
https://www.googleapis.com/admin/directory/v1/users/test%40test.com?alt=json返回"未授权访问此资源/ api">
我不确定错误是因为我试图错误地更新字段,如果@url中的转义导致问题,或者我没有正确的范围(我正在使用https://www.googleapis.com/auth/admin.directory.user, https://www.googleapis.com/auth/admin.directory.domain, https://www.googleapis.com/auth/admin.directory.userschema).
如何为每个人创建自定义属性并使用python SDK为用户更新?
我建议你参考以下文档:
您可以在下面找到如何创建自定义架构并将其用于用户的示例
# third parties imports
from googleapiclient.discovery import build
from httplib2 import Http
from oauth2client.service_account import ServiceAccountCredentials
# modify according to your requirements
CLIENT_SECRET = 'client.json' # the credentials downloaded from the GCP Console
ADMIN_USER = 'admin@yourdomain.com' # The admin user used by the service account
SCHEMA_USER = 'user@yourdomain.com' # The user for which the custom schema will be set
SCHEMA_NAME = 'TestSchema' # the name of the schema we want to work with
# Scopes
SCOPES = ['https://www.googleapis.com/auth/admin.directory.userschema', # to create the schema
'https://www.googleapis.com/auth/admin.directory.user', ] # to manage users
# service account initialization
credentials = ServiceAccountCredentials.from_json_keyfile_name(CLIENT_SECRET, scopes=SCOPES)
delegated_admin = credentials.create_delegated(ADMIN_USER)
admin_http_auth = delegated_admin.authorize(Http())
admin_sdk = build('admin', 'directory_v1', http=admin_http_auth) # Admin SDK service
# we list all the schemas...
schema_list_params = {
'customerId': 'my_customer',
'fields': 'schemas/schemaName',
}
schema_list = admin_sdk.schemas().list(**schema_list_params).execute()
# ... And we create a set with the names of the custom schemas
unique_schemas = set()
for schema in schema_list['schemas']:
unique_schemas.add(schema['schemaName'])
# if the schema we want to work with is not there, we create it
if SCHEMA_NAME not in unique_schemas:
schema_insert_params = {
'customerId': 'my_customer',
'body': {
'schemaName': SCHEMA_NAME,
'displayName': 'Test Schema',
'fields': [
{
'fieldName': 'TestField',
'fieldType': 'STRING',
'displayName': 'Test Field',
'multiValued': False,
}
]
},
}
schema_insert = admin_sdk.schemas().insert(**schema_insert_params).execute()
# we set a value for our custom schema on the desired user
user_patch_params = {
'userKey': SCHEMA_USER,
'body': {
'customSchemas': {
SCHEMA_NAME: {
'TestField': 'My cool test value!'
},
},
},
}
user_patch = admin_sdk.users().patch(**user_patch_params).execute()
Run Code Online (Sandbox Code Playgroud)