跳到主要内容

重置密码

Logto 提供了全面的密码重置功能,允许用户在忘记密码或想要更改密码时安全地恢复对其账户的访问。此功能支持包括电子邮件和短信在内的多种验证方式,确保用户可以通过自己偏好的通信渠道重新获得访问权限。

忘记密码用于账户恢复

配置

启用忘记密码功能:

  1. 配置连接器 (Connectors):在 控制台 > 连接器 (Connectors) > 电子邮件和短信连接器 (Email and SMS connectors) 中设置 电子邮件短信 连接器 (Connectors)

  2. 收集用户联系方式:确保用户在注册或通过账户设置时已注册电子邮件 / 手机号

  3. 启用验证方式

  4. 保存并测试:保存更改并使用 实时预览 进行测试

用户体验流程

启用重置密码功能后,登录表单下方会显示“忘记密码”链接按钮。用户可以点击“忘记密码”链接发起密码重置流程。

  1. 访问登录页面:用户访问登录页面。
  2. 点击忘记密码链接:用户点击“忘记密码”链接。
  3. 输入邮箱 / 手机号:点击“忘记密码”链接后,用户会被重定向到新页面,在此输入已注册的邮箱地址或手机号。
  4. 发送验证码:Logto 会向用户提供的邮箱地址或手机号发送验证码,并跳转到验证码验证页面。
  5. 输入验证码:用户输入收到的邮箱或手机验证码。Logto 会验证验证码及与邮箱地址或手机号关联的用户身份。
  6. 输入新密码:验证码验证通过后,用户将被提示输入新密码。
  7. 密码重置成功:如果新密码符合密码策略要求,密码将被成功更新。
  8. 重定向到登录页面:用户将被重定向到登录页面,使用新密码登录。
重置密码流程

登录后修改密码

已认证 (Authentication) 用户可以通过你的应用内账户设置体验更改(或首次设置)密码。参见 账户设置 了解如何通过 Account API 构建此功能。

检查用户是否有密码

用户数据中有一个布尔字段 hasPassword,表示该用户当前是否存储有密码凭证。

你可以通过以下方式获取 hasPassword

  • Management API:如 GET /api/users/:id(包含在用户对象中)
  • 自定义令牌声明 (Claims):将 hasPassword 注入到 ID / 访问令牌 (Access tokens) 中(这样你的前端可以无需额外 API 调用就分支 UI)

然后调用 Account API 端点设置或更新密码(请求细节见账户设置指南)。对于从未设置过密码的用户,你不需要(也不应要求)旧密码字段。

提示:

即使你的注册方式要求邮箱 / 手机 / 用户名注册时“设置密码”,通过纯社交登录创建的用户默认会跳过密码创建以减少摩擦。这些用户的 hasPassword = false,直到他们之后主动设置密码。除非你的安全模型要求,否则避免在社交注册后强制立即设置密码——延迟、按场景提示通常转化效果更好。

自定义密码策略

自定义密码长度、字符要求和词语限制,以满足你的业务安全需求并提供良好用户体验。这些设置可在 安全 > 密码策略 部分进行配置。查看 密码策略 文档了解更多信息。

常见问题

如何在密码重置成功后让用户退出登录?

订阅 PostResetPassword Webhook 事件,在用户成功重置密码时收到通知。你可以随后触发 退出登录 操作,使用户当前会话失效并重定向到登录页面。

如何在自定义 UI 上实现密码重置流程?

你可以通过 Logto 的 Management APIAccount API 实现自定义密码重置流程。详情请查阅 账户设置

你可以创建自托管的密码重置端点,并利用 Logto SDK 发起一个 first_screen 设置为 reset-password 的登录请求。这将无缝地将用户重定向到密码重置页面。