批量用户导入
使用旧版 bcrypt 或现代 Argon2id 密码哈希值每批导入最多 1,000 个用户。下次登录时透明升级到 Argon2id。
5分钟 读取·级别 中间·修改于 2026年10月26日
自此翻译以来,英文来源已发生变化。某些信息可能已过时。
该页面已自动翻译。英文版具有权威性。
从 Supabase、 Firebase、 Auth0 或自定义身份验证数据库迁移时,用户希望其现有密码能够无缝工作,而无需强制全局密码重置。
Aurabase 提供高吞吐量批量导入端点 (POST /v1/auth/admin/users/import),每个请求最多能够接收 1,000 个用户。该操作会返回逐项状态报告,因此无效记录不会阻塞批次的其余部分。
导入端点支持以下密码哈希算法:
| 算法 | 标识符 | 行为 |
|---|
| Argon2id | $argon2id$v=19$m=... | 直接使用 OWASP 参数进行验证。 |
| bcrypt | $2a$, $2b$, $2y$ | 登录时进行验证,首次成功身份验证后,会透明地重新编码为 Argon2id。 |
如果没有为用户提供 password_hash,则创建的帐户没有密码。用户可以使用 Magic Links、电子邮件/短信 OTP 或密码重置链接进行身份验证。
需要管理员授权(service_role 键)。
Terminalbash
curl -X POST "$AURABASE_URL/v1/auth/admin/users/import" \
-H "apikey: $AURABASE_SERVICE_ROLE_KEY" \
-H "Authorization: Bearer $AURABASE_SERVICE_ROLE_KEY" \
-H "Content-Type: application/json" \
-d '{
"users": [
{
"email": "alice@example.com",
"email_verified": true,
"password_hash": "$2b$12$e8kPM4QJ8a2x4K7hM0uL.OeQ7f...",
"name": "Alice Johnson",
"user_metadata": { "department": "Engineering" }
},
{
"email": "bob@example.com",
"email_verified": false,
"password_hash": "$argon2id$v=19$m=65536,t=3,p=4$..."
}
]
}'
响应(200 OK)
该响应详细说明了处理的记录总数以及逐项报告:
json
{
"data": {
"created": 2,
"skipped": 0,
"errors": 0,
"report": [
{
"index": 0,
"email": "alice@example.com",
"status": "created",
"id": "e3b0c442-98fc-1c14-9afb-f4c599684824"
},
{
"index": 1,
"email": "bob@example.com",
"status": "created",
"id": "7d2b5129-3bdf-48bc-8919-4b684df69921"
}
]
}
}
如果项目中已存在电子邮件,则会将其标记为 skipped 而不是引发致命错误。
使用 authAdmin.importUsers():
import-script.tstypescript
import { createClient } from '@aurabase/aurabase-js'
const aura = createClient(process.env.AURABASE_URL!, process.env.AURABASE_SERVICE_ROLE_KEY!)
const usersToImport = [
{
email: 'user1@example.com',
emailVerified: true,
passwordHash: '$2b$12$e8kPM4QJ8a2x4...',
name: 'User One',
userMetadata: { plan: 'pro' },
},
{
email: 'user2@example.com',
emailVerified: false,
passwordHash: '$argon2id$v=19$m=65536,t=3,p=4$...',
name: 'User Two',
},
]
const { data, error } = await aura.authAdmin.importUsers(usersToImport)
if (error) {
console.error('Import failed:', error.message)
} else {
console.log(`Import summary: ${data.created} created, ${data.skipped} skipped, ${data.errors} errors`)
for (const item of data.report) {
if (item.status === 'error') {
console.warn(`Row ${item.index} (${item.email}) error: ${item.error}`)
}
}
}
您还可以直接通过Web界面导入用户:
- 导航到项目仪表板中的 身份验证 › 用户。
- 单击顶部工具栏中的 导入用户 按钮。
- 选择 JSON 或 CSV 格式。您可以单击 插入示例 来检查预期的架构。
- 粘贴您的数据并单击 开始导入。
- 检查批次摘要和逐行状态报告。