尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Logto 忘记密码流程怎么配置恢复方式并理解验证码验证机制

Logto 忘记密码流程怎么配置恢复方式并理解验证码验证机制 Logto 忘记密码流程怎么配置恢复方式并理解验证码验证机制【免费下载链接】logto‍ Authentication and authorization infrastructure for SaaS and AI apps, built on OIDC and OAuth 2.1 with multi-tenancy, SSO, and RBAC.项目地址: https://gitcode.com/GitHub_Trending/lo/logto如果你的 Logto 租户里用户会忘记密码你需要在「登录体验」中打开并配置忘记密码的恢复方式并且搞清楚验证码从发送、校验到重置密码这一整条链路是怎么走的。这篇文章基于仓库内的 忘记密码流程文档、schema 定义与 core 代码给出配置入口、暴露规则和验证方式。前提是Logto 已可访问含管理控制台 Console且租户中已启用与恢复方式对应的连接器Email 或 SMS。恢复方式配置的前提Logto 只支持两种忘记密码恢复方式定义在 ForgotPasswordMethod 枚举EmailVerificationCode通过邮箱发送验证码PhoneVerificationCode通过手机号发送验证码。流程文档明确说明用户名、社交登录、企业 SSO、一次性令牌one-time token和 passkey 都不属于忘记密码流程。配置项本身的形态是一个数组forgotPasswordMethodsGuard z.nativeEnum(ForgotPasswordMethod).array()即登录体验中forgotPasswordMethods字段接受上述枚举值的数组见 jsonb-types/sign-in-experience.ts。另外控制台里忘记密码配置区只在登录方式中包含密码时才会出现SignInForm 中用hasPasswordMethod登录方式列表里存在password项作为渲染条件。也就是说如果租户的登录方式里没有启用密码登录管理界面不会出现这个配置入口忘记密码也没有意义——它最终走的是重置密码。在控制台中配置恢复方式入口在 Console 的登录体验页面。ForgotPasswordMethodEditBox 组件挂在「注册和登录 → 登录」区块下对应的表单标题 i18n key 为sign_in_exp.sign_up_and_sign_in.sign_in.forgot_password。操作要点打开登录体验设置进入「注册和登录」sign-up and sign-in页签确认登录方式中已启用密码登录。在「忘记密码」forgot_password配置区点击添加恢复方式从下拉中选择EmailVerificationCode或PhoneVerificationCode。表单字段名是forgotPasswordMethods默认值为空数组[]即默认不暴露任何恢复方式。保存时会做一条校验所选每种恢复方式要求的连接器必须处于已启用状态EditBox 校验逻辑 中requiredConnectors.every((connectorType) isConnectorTypeEnabled(connectorType))所需连接器列表由 getForgotPasswordMethodsRequiredConnectors 计算。对应关系是EmailVerificationCode要求 Email 类型连接器启用PhoneVerificationCode要求 SMS 类型连接器启用。配置项支持增、删和拖拽排序handleAddMethod/handleRemoveMethod/handleSwapMethods顺序即端用户界面展示恢复方式的顺序。如果选择了邮箱恢复方式但没有启用任何 Email 连接器或选了手机号但没有 SMS 连接器表单会显示连接器错误提示而不是保存成功——这是第一条可以直接观察到的校验结果。恢复方式如何对外暴露管理端配置保存后端用户Experience实际能看到哪些恢复方式由 getForgotPasswordAvailability 决定逻辑分两种模式forgotPasswordMethods为null未显式配置旧版/回退模式仅由连接器决定有 Email 连接器则email: true有 SMS 连接器则phone: trueforgotPasswordMethods为显式数组方式必须同时满足在数组中且对应连接器存在例如email: methods.includes(ForgotPasswordMethod.EmailVerificationCode) hasEmailConnector。计算结果以forgotPassword: { email, phone }的形式包含在登录体验数据里返回给端用户。流程文档中的第一步判断也印证这一点进入忘记密码入口后先加载设置若忘记密码已启用且恢复方式已暴露则只显示已启用的恢复方式否则展示错误页面。所以配置了但没启用连接器和根本没有配置在端用户看到的暴露效果上都会收敛为不可用。验证码验证机制从发码到重置密码忘记密码流程文档 给出的完整链路如下按顺序理解加载设置并检查暴露忘记密码入口先读取登录体验设置只有forgotPassword暴露了对应方式才继续否则直接是错误页面。界面只展示已启用的恢复方式。提交识别符用户选择邮箱或手机号恢复方式输入对应的邮箱地址或手机号此步骤有可选的验证码captcha环节。文档特别注明提交识别符时不检查用户是否存在系统先发验证码验证码通过后再查用户流程不会提前暴露账户是否存在防账户枚举设计。发送验证码端用户界面先把所选恢复方式对照当前登录体验设置解析一次UI 侧守卫然后发送验证码进入验证码输入页。校验验证码用户输入验证码后后端会再次对照登录体验设置重新验证忘记密码验证方式后端守卫在identifyUser阶段、验证码验证之后执行而不是在发码接口里执行——这是流程文档 note_guard 的说明。匹配用户验证通过后的识别符要与已有用户账户匹配。匹配不上则展示identifier 未找到的提示流程中的no_user分支匹配上则进入重置密码页。重置密码输入新密码按密码策略password policy校验不通过则回到输入框重试通过则保存新密码。收尾保存后清除缓存的恢复识别符展示密码已修改消息然后返回登录页。两个边界行为同样来自流程文档如果恢复会话在重置密码完成前过期用户会被送回较早的步骤重新开始ForgotPassword交互事件不能与其他交互事件混用experience-interaction.ts 中事件切换时抛出 400 的session.not_supported_for_forgot_password。用 Experience API 核对发送与校验如果你想在界面之外确认整条链路可以直接调用 Experience 的验证码接口定义见 verification-code.openapi.json。下面的示例中LOGTO_ENDPOINT需要替换为你的 Logto 服务地址identifier是真实的邮箱地址或手机号。发送验证码200 返回verificationIdcurl -X POST https://LOGTO_ENDPOINT/api/experience/verification/verification-code \ -H Content-Type: application/json \ -d { identifier: userexample.com, interactionEvent: ForgotPassword }请求体两个字段的作用来自 OpenAPI 描述identifier是接收验证码的邮箱地址或手机号interactionEvent支持SignIn、Register、ForgotPassword决定验证码使用哪个模板。响应状态码的判读状态码含义200验证码发送成功响应体含verificationId后续校验必须带上它400提供了无效的 identifier501发送验证码的连接器未配置拿到verificationId后校验验证码curl -X POST https://LOGTO_ENDPOINT/api/experience/verification/verification-code/verify \ -H Content-Type: application/json \ -d { code: 收到的验证码, identifier: userexample.com, verificationId: 上一步返回的 verificationId }字段说明code是要校验的验证码identifier必须与发送时使用的 identifier 一致verificationId是 CodeVerification 记录的 ID。响应判读状态码含义200校验成功验证记录被标记为已验证返回的verificationId可用于后续的识别用户Identification或绑定 Profile400验证码无效或尝试次数超过上限code-verification.ts 中返回session.verification_failed404验证记录不存在session.verification_session_not_found后端对忘记密码方式本身还有一道守卫guardForgotPasswordVerificationMethod 要求验证记录类型必须是EmailVerificationCode或PhoneVerificationCode并且当forgotPasswordMethods已显式配置时所用方式必须在配置数组中否则抛出 422 的session.not_supported_for_forgot_password。当forgotPasswordMethods为null时回退到基于连接器的校验允许所有已配置连接器的方式。结合前面发送成功后再查用户的顺序如果测试时出现 422先核对恢复方式是否真的保存成功且连接器已启用如果出现 501说明对应类型连接器根本没配置。验证整条流程成功与否端到端的成功判据按流程文档是输入已启用恢复方式下的邮箱/手机号 → 收到验证码 → 验证码页提交后若该识别符对应已有账户则进入重置密码页能按密码策略重置成功并看到密码已修改随后回到登录页。失败侧的可观察现象恢复方式未暴露或界面未展示对应选项检查登录方式中是否有密码登录、forgotPasswordMethods是否保存、对应连接器是否启用发码 400identifier 格式或内容无效发码/校验 501连接器未配置校验 400验证码错误或尝试次数超限422session.not_supported_for_forgot_password所提交的方式不在forgotPasswordMethods配置中验证码通过但提示识别符未找到该邮箱/手机号下没有已注册用户这属于预期行为而不是故障会话中途过期用户被送回较早步骤需要重新走发码和校验。限制小结恢复方式只有EmailVerificationCode和PhoneVerificationCode两种其余验证途径用户名、社交、SSO、one-time token、passkey不参与忘记密码流程方式配置与连接器是与的关系二者缺一端用户侧就不可用账户存在性检查被刻意放在验证码校验之后接口不会在提交阶段泄露这个邮箱/手机号是否存在账户忘记密码交互事件独立不能与登录/注册交互事件混用混用会返回 400。完成配置并通过上面的端到端路径后端用户在登录页的忘记密码入口即可按所选方式重置密码如需调整密码强度对应的密码策略password policy在登录体验的同一设置体系中配置。【免费下载链接】logto‍ Authentication and authorization infrastructure for SaaS and AI apps, built on OIDC and OAuth 2.1 with multi-tenancy, SSO, and RBAC.项目地址: https://gitcode.com/GitHub_Trending/lo/logto创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表