用途:Login Form 是用户认证并访问受保护内容的主要入口,通常由标识字段(邮箱或用户名)、密码字段和提交按钮组成,常配有“记住我”“忘记密码”和社交登录选项。设计良好的登录表单在安全与易用之间平衡:一方面减少合法用户的摩擦,另一方面防止未授权访问。
适用场景:需要认证后才能使用功能的 Web 应用;电商网站中用户登录后查看订单、心愿单和保存地址;SaaS 平台将功能置于账户之后;社区或社交平台要求身份以参与互动;带基于角色访问控制的管理后台与内部工具。
不适用场景:无需认证的公开页面;适合开放访问的只读内容(博客、文档);一次性交互中认证造成不必要摩擦;共享设备或自助终端等会话管理不方便的界面。
实施流程:先确认该模式与问题和约束相符,再复制示例;从 references/pattern.md 的解剖和示例出发,选择最小可行变体;先落实无障碍、性能和交互护栏,再做视觉打磨;使用测试指引验证键盘、屏幕阅读器、响应式和失败场景下的行为。
无障碍要点:字段通过 for/id 与 <label> 关联;使用 autocomplete="email" 和 autocomplete="current-password" 支持浏览器自动填充;错误用 role="alert" 显示,并通过 aria-describedby 关联字段;无效字段标记 aria-invalid="true";密码切换按钮在切换时更新 aria-label;支持按 Enter 提交。不要用 placeholder 替代标签;不要在未说明原因时禁用提交按钮(应改用验证消息)。
性能目标:完整表单渲染小于 100ms;按键到显示小于 50ms;行内验证反馈小于 100ms;认证请求感知时间小于 1000ms(立即显示加载);成功后跳转导航开始小于 200ms。优化策略:预取登录后目标,例如 <link rel="prefetch" href="/dashboard" />。
常见错误:错误消息如“该邮箱没有账户”或“密码错误”会泄露账户是否存在,应改为通用提示“邮箱或密码无效,请重试”,并让两种情况响应时间一致;缺少速率限制反馈时,可在 3—5 次失败后提示“尝试次数过多,请等待 30 秒后再试”,并在服务端实现带指数退避的限流;登录失败后不应清空邮箱字段,只清空密码字段。
相关模式参考:密码重置、注册、社交登录、双因素认证。完整实现细节、示例与测试说明见 references/pattern.md。模式页面:https://uxpatterns.dev/patterns/authentication/login。