# 配置自定义数据库

只有企业版用户能够使用连接自定义数据库功能,详情请见 https://authing.cn/pricing (opens new window)。如果你想试用,请联系 15559944612 或 sales@authing.cn。

你可以自定义数据库认证用户,为此你需要配置数据库连接、编写数据库操作脚本、配置环境变量(可选)。

请确保你的数据库有 Authing 用户资料必须的一些字段,如 id, email, photo, nickname, username, phone 等,详情请见Authing 用户资料字段及其释义 了解 Authing 用户资料 Schema。

Authing 支持直接连接以下几种主流的数据库:

  • MySQL
  • PostgresQL
  • MongoDB
  • Sql Server

你也可以将数据库封装成一个服务,不直接对外暴露数据库连接,如你可以把认证操作封装成一个 API: https://mydomain.com/auth

如果你在脚本中访问的服务配置有防火墙,请确保其对以下 IP 地址开放:140.179.19.50, 52.80.250.250 . 你还可以通过以下 API 动态获取 Authing 服务器对外 IP 地址:https://core.authing.cn/api/v2/system/public-ips (opens new window)

# 开启自定义数据库连接

开启自定义数据库后会立即生效,在你还没有编写自定义脚本之前,用户尝试登录会提示类似 Please implement the Login script for this database connection 的错误,这是从默认的脚本提示的错误,请前往修改脚本,或暂时关闭自定义数据库连接。

登录 Authing 控制台 (opens new window),在 连接身份源 - 自定义数据库 页面,点击右上角的开启按钮:

# 选择场景

自定义数据库有两种不同模式,你可以根据自己的业务需求选择合适的模式:

  • 惰性迁移用户:这种迁移用户的模式称为惰性迁移(lazy migration),简单来说原理如下:最开始所有的原始用户数据在你的数据库,当用户第一次尝试在 Authing 登录时,Authing 会通过你配置的自定义数据库脚本在你的数据库查找并验证用户,如果成功,会将该用户迁移到 Authing 中;该用户第二次登录时,将使用 Authing 的数据库对其进行验证;当所有的用户都至少登录一次时,意味着迁移上云任务完成。详情请见:使用自定义数据库实现用户惰性迁移 (opens new window)
  • 完全使用自定义数据库:这种模式下用户数据始终保存在你的数据库中,Authing 永远不会保存你的用户数据。为了让系统正常工作,你需要实现完整的用户增删改查脚本。

# 配置数据库连接信息

接下来填写数据库连接信息,你可以选择 Connection URIProgrammatic 两种方式:

# Connection URI 形式

Connection URI 一般是 protocol://username:password@host:port/database 这种形式的 URI,如 postgres://postgres:postgres@localhost:5432/database-name,你可以在脚本中通过全局变量 env.DB_CONNECTION_URI 引用,如下所示:

const { Client } = require('pg')

const client = new Client({
  connectionString: env.DB_CONNECTION_URI,
})
await client.connect()

# Programmatic 形式

这种模式分别指定数据库 Host、端口、用户名、密码、database 名称,可以分别在脚本中通过全局变量 env.DB_HOSTenv.DB_PORTenv.DB_USERNAMEenv.DB_PASSWORDenv.DB_DATABASE 引用,如下所示:

const { Client } = require('pg')
const client = new Client({
  host: env.DB_HOST,
  port: env.DB_PORT,
  user: env.DB_USERNAME,
  password: env.DB_PASSWORD,
  database: env.DB_DATABASE,
})
await client.connect()

# 编写数据库操作脚本

选择 迁移用户数据到 Authing(LAZY_MIGRATION) 模式时,你一共需要编写两个函数:

  • 登录:该脚本会在用户尝试登录的时候执行,如果该用户未同步到 Authing 数据库,会根据你填写的此脚本检验用户账号密码。
  • 查找用户:该脚本会在用户尝试注册的时候执行,如果该脚本返回了用户身份信息,会提示用户用户已存在而注册失败。

我们目前提供了 MySQLPostgresQLMongoDBSql Server自定义服务 五种方式的模版,你可以根据需要编写对应的脚本。

选择 完全使用自己的数据库(CUSTOM_USER_STORE) 模式时,你一共需要编写以下几个函数:

  • 登录:该脚本会在用户尝试登录的时候执行,如果该用户未同步到 Authing 数据库,会根据你填写的此脚本检验用户账号密码。
  • 查找用户:该脚本会在用户尝试注册的时候执行,如果该脚本返回了用户身份信息,会提示用户用户已存在而注册失败。
  • 创建用户:该脚本会在用户注册或者使用 API 和控制台创建用户时执行,你需要将用户信息保存到自己的数据库中。
  • 修改用户资料:该脚本会在管理员修改用户资料或者用户自己修改用户资料时执行。
  • 删除用户:该脚本会在管理员使用控制台或者 API 删除用户账号时执行。
  • 获取用户列表:该脚本会在管理员使用控制台或者 API 获取用户列表时执行,这个接口需要的数据中需要包含用户总数、当前页用户列表。
  • 验证密码:该脚本会在用户尝试重置密码,验证其原始密码时执行。

# 测试数据库脚本

我们给开发者提供了一个供快速测试测试的在线数据库,你可以使用此数据库进行快速测试,点击此 (opens new window)访问。

该数据库对所有用户免费开放,数据库连接信息为 postgres://postgres:postgres_root_local@47.74.20.164:31000/custom-db-connection,你可以创建测试用户,或者使用列表中的示例用户。

配置好 Connection URI 之后点击保存,在点击最下方的 调试 按钮。

在弹出的表单中填写示例用户池用户列表中的某个用户:

点击测试按钮,你应该可以看到相关成功提示。