跳到主要内容

用户迁移

Logto 支持从其他平台手动迁移现有用户,本指南将向你展示如何通过 Management API 导入现有用户,并讨论在迁移前你应该考虑的事项。

用户模式

在开始之前,让我们先看看 Logto 中的用户模式。用户模式有三个部分需要注意:

  1. 基本数据:是用户资料中的基本信息,你可以将其与现有用户资料中的数据匹配。
  2. 自定义数据:存储额外的用户信息,你可以用它来存储无法匹配基本数据的文件。
  3. 社交身份:存储从社交登录中获取的用户信息。

你可以创建一个映射,将现有用户资料中的信息匹配到基本数据自定义数据。对于社交登录,你需要额外的步骤来导入社交身份,请参考 链接社交身份到用户 的 API。

密码哈希

Logto 使用 Argon2 来哈希用户的密码,同时也支持其他算法如 MD5SHA1SHA256Bcrypt 以方便迁移。这些算法被认为是不安全的,相应的密码哈希将在用户首次成功登录时迁移到 Argon2。

如果你需要支持任何特定的哈希算法,请告诉我们

迁移步骤

  1. 准备用户数据 你应该首先从现有平台导出用户数据,然后将用户信息映射到 Logto 用户模式。我们建议你将映射后的数据准备为 JSON 格式。以下是用户数据的示例:

    [
    {
    "username": "user1",
    "passwordDigest": "password-encrypted",
    "passwordAlgorithm": "SHA256"
    },
    {
    "username": "user2",
    "passwordDigest": "password-encrypted",
    "passwordAlgorithm": "SHA256"
    }
    ]
  2. 创建 Logto 租户 你需要在 Logto 中设置一个租户。你可以使用 Logto Cloud 或 Logto OSS。如果你还没有这样做,请参考 设置 Logto Cloud 指南。

  3. 设置 Management API 的连接 我们将使用 Management API 导入用户数据,你可以参考 Management API 了解如何在开发环境中设置连接。

  4. 导入用户数据 建议准备一个脚本逐个导入用户数据,我们将调用 create user API 来导入用户数据。以下是脚本的示例:

    const users = require('./users.json');

    const importUsers = async () => {
    for (const user of users) {
    try {
    await fetch('https://[tenant_id].logto.app/api/users', {
    method: 'POST',
    headers: {
    'Content-Type': 'application/json',
    Authorization: 'Bearer [your-access-token]',
    },
    body: JSON.stringify(user),
    });
    // 暂停一会以避免速率限制
    await new Promise((resolve) => setTimeout(resolve, 200));
    } catch (error) {
    console.error(`Failed to import user ${user.username}: ${error.message}`);
    }
    }
    };

    importUsers();

请注意,API 端点有速率限制,你应该在每个请求之间添加暂停以避免速率限制。请查看我们的速率限制页面以获取详细信息。

如果你有大量用户数据(10 万以上用户),你可以联系我们以增加速率限制。

相关资源

将现有用户数据库迁移到 Logto 的一般指南