简体中文
  • release

Logto 产品更新

Logto v1.40.0 带来了审计日志的时间范围选择器、更丰富的组织成员 Webhook 载荷、大型组织下的性能大幅提升,以及多项自托管体验改进。

Yijun
Yijun
Developer

不要在用户认证上浪费数周时间
使用 Logto 更快地发布安全应用。几分钟内集成用户认证,专注于您的核心产品。
立即开始
Product screenshot

Logto v1.40.0 是一次平台硬化版本。它让大规模下的审计日志变得实用,告诉你组织成员 Webhook 到底发生了什么变化,加快了大型租户下的组织查询速度,还消除了自托管部署中几个长期存在的痛点。还有三个新的连接器加入。以下是新内容。

你可以实际限定范围的审计日志

审计日志在事情刚刚发生时最有用 —— 但之前 Console 一直获取的是一个无限范围窗口,在日志体量非常大的租户下会变慢。

本次发布为审计日志页面加入了 时间范围选择器,默认显示最近 7 天。你可以选择预设时间窗口(最近 1 小时最近 24 小时最近 7 天最近 30 天)和自定义日期范围,想访问更早的日志只要扩大一下窗口即可(#8810)。

在底层,管理 API 的 GET /api/logsGET /api/hooks/{id}/recent-logs 新增了 start_timeend_time 查询参数(UNIX 毫秒,开区间),这样你也可以编程方式限定日志查询范围(#8806)。对于非常大的租户,新增的 enableCap=true 参数会在约一万行时提前返回,响应头带有 Total-Number-Is-Capped: true,用部分计数换取不会超时的响应,Console 达到上限时会自动切换为上一页/下一页的布局(#8796#8802)。默认情况下没有该参数时行为不变。

组织成员 Webhook 现在详细告知你更改内容

Organization.Membership.Updated Webhook 之前只能告诉你成员变了,但不会告诉你具体变了什么。现在它显式携带了 delta 字段 —— 在所有成员接口包含 addedUserIds / removedUserIdsaddedApplicationIds / removedApplicationIds,在邀请被接受和即时用户创建(邮件域名或企业 SSO JIT)事件中也带有 addedUserIds#8840)。

这完全是新增且兼容的:如果没有 delta,字段会被省略,每个条目数组最多 5000 条用于批量操作(超出可通过 GET /organizations/:id/users.../applications 重新对账)。详细约定见 Webhook 参考文档。这一工作取代了之前社区的提案 —— 感谢 @chiche84#8752)。

我们也顺带增强了会话代码,GET /api/my-account/sessions 所有条目新增了 isCurrent 标记,方便会话管理 UI 高亮“本设备”行,避免误删自己的会话(#8731)。

组织规模增长时也能保持快速

这次有几项改动专为巨型组织下的租户而设计:

  • GET /organizations/:id/users 通过 LATERAL 子查询聚合角色,这样 LIMIT 能在查找角色前先裁剪用户集 —— 不必在每次分页时都构建完整的“成员 × 角色”连接表(#8826)。
  • 两个新的二级索引加速了反向查找:一个是 organization_user_relations (tenant_id, user_id),在每次登录和成员中间件中都会被命中(#8818);另一个是 organization_role_user_relations (tenant_id, organization_id, user_id),被 getUserScopes 和按用户角色关联命中(#8819)。
  • PUT /organizations/:id/users 换成了新的增量查询,只写实际上变化的行,不每次都全量重写成员行 —— 且自动保留没变动成员的角色分配(#8820)。

账号中心和登录流程修复

  • 登录到注册时的条款协议。 如果协议策略是“只在注册勾选协议”,那现在用未注册邮箱/手机号登录、然后选择“创建新账号”时,也会先弹出条款协议窗口,然后才创建账号—— 和专用注册页、社交/SSO 流程保持一致(#8835)。
  • 首次设置密码。 没有密码、邮箱或手机号的用户,现在可以通过 Account API 无需验证记录即首次设置密码(#8746)。
  • 静默重新认证。 用户信息获取出错时(例如切换浏览器账号后 access token 失效),Account Center 会用 prompt=none 自动重新认证,而不会直接跳转到登录页,感谢 @taka-guevara#8785)。
  • 更优的会话过期和社交回调。 过期会话会直接重定向,不再闪现手动登录错误提示(#8830),社交账号绑定回调会正确读取 connectorId#8758),二步验证开关标签也更清晰了(#8792)。
  • i18n。 纠正了 MFA 短语中“Passkey”的中文译法,感谢 @rotempasharel1#8870)。

新增和改进的连接器

本次加了三个连接器,还对多个现有连接器做了改进 —— 多个由社区贡献:

  • MailJunky 邮件连接器,用于事务性认证邮件,贡献者 @devadarshh#8638)。
  • SMSBao 短信连接器,用于国内短信验证码,贡献者 @wintbiit#8871)。
  • 阿里云短信认证 连接器,贡献者 @CertStone#8385)。
  • 阿里云邮件推送 现已支持自定义 Direct Mail 区域配置(#8892)。
  • 企业微信 通过额外 API 调用获取更丰富的用户资料,贡献者 @liyujun-dev#8191)。
  • SMTP 连接器现在 auth 可以省略 userpass,支持只凭源(如 IP/VLAN)认证,无需伪造身份信息(#8888)。
  • Connector Kit 加强了邮件品牌 URL 检测,避免点状缩写导致误判,感谢 @aayushbaluni#8747)。

自托管用户专属

几项变更专门优化了开源自托管部署体验:

隔离环境下的管理员初始化。 installdb seed 命令现在可以带 --dapc 标志(等同 --disable-admin-pwned-password-check)。管理员租户种子密码策略默认启用“Have I Been Pwned”泄漏检测,每次设置管理员密码都会访问 api.pwnedpasswords.com —— 搭隔离环境没网时首次创建管理员就会卡住。有了 --dapc,会关闭这个检测,管理员注册不再依赖外部网络。感谢 @darcyYe#8859

管理员签名密钥从数据库读取。 开源部署现在直接从数据库读取管理员租户签名密钥,省去了之前让 Logto 容器访问自身 OIDC 配置时还要加主机/DNS 映射的麻烦(#8869)。

需要数据库迁移。 v1.40.0 带来了数据库结构变更(新的组织关系索引和内部字段)。升级后需先执行数据库升级步骤,再启动服务。参见 升级指南

快速开始

准备升级?请参考 升级指南 获取操作步骤。

完整更新列表见 GitHub 发布页面

有问题或建议?欢迎加入我们的 Discord 社群 或到 GitHub 提 issue。