调用Auth0 bulk user import API提示用户文件不能为空报错
问题原因
- 你收到
Users file must not be empty报错的核心原因是手动拼接multipart/form-data请求体时,users文件字段没有填入实际的用户JSON内容:查看现有代码的CURLOPT_POSTFIELDS配置,users字段声明完Content-Type: text/json后,直接接了两个换行就到下一个请求分隔边界,服务端解析到的文件内容为空。你虽然尝试用stream_get_contents、file_get_contents读取用户文件,但没有把读取到的内容正确插入到请求体的对应位置。 - 手动拼接multipart格式的请求体容错率极低,哪怕换行符、边界分隔符差一个字符,都会导致服务端解析失败,这类请求不需要手动构造格式。
修复方法
放弃手动拼接请求体和手动设置Content-Type头的写法,使用PHP cURL原生提供的CURLFile类实现文件上传,cURL会自动生成符合规范的multipart格式、自动填充边界值,不会出现格式错误。
调整后的可运行代码如下:
// 替换为你的实际配置值 $token = '你的Auth0 Management API访问令牌'; $userJsonPath = __DIR__ . '/你的用户列表文件.json'; // 本地用户JSON文件的绝对路径 $connectionId = '你的Auth0数据库连接ID'; $externalId = '自定义的本次导入任务标识'; $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => "https://你的Auth0域名/api/v2/jobs/users-imports", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_POST => true, CURLOPT_POSTFIELDS => [ 'users' => new CURLFile($userJsonPath, 'application/json', 'users.json'), 'connection_id' => $connectionId, 'external_id' => $externalId, // 如需开启用户存在时更新的功能,可追加配置 'upsert' => 'true' ], CURLOPT_HTTPHEADER => [ "authorization: Bearer " . $token // 不要手动设置Content-Type头,cURL会自动生成带正确边界的multipart/form-data头 ], ]); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; }
注意事项
- 确保使用的Management API令牌已开通
create:users_imports权限,否则会返回权限不足错误。 - 导入的用户JSON文件需符合格式要求:顶层为用户对象数组,单文件大小不超过500KB,单次导入用户数不超过500。
- 若PHP版本低于5.5无法使用
CURLFile,可使用'users' => '@' . realpath($userJsonPath) . ';type=application/json'的旧语法实现,但推荐升级PHP版本使用更安全的CURLFile写法。
内容的提问来源于stack exchange,提问作者Lahmer Bechir
相关产品推荐
相关产品推荐

