版本: v1.2 最后更新: 2026-03-04
当前系统采用手机号 + 短信验证码作为唯一登录与身份验证方式。手机号是用户账户的核心标识,换绑操作直接影响登录入口,属于高风险行为,需在体验流畅的前提下保障足够的安全性。
「个人资料」弹窗 → 手机号字段右上角「换绑」文字按钮。
点击「换绑」后,当前手机号下方以折叠展开方式呈现换绑表单,分两步完成:
第一步:验证旧手机号(身份确认)
| 元素 | 说明 |
|---|---|
| 步骤提示 | 「第 1 步:向当前手机号发送验证码,确认是本人操作」 |
| 验证码输入框 | 输入旧手机号收到的验证码 |
| 发送验证码按钮 | 点击后发送至当前绑定号码,60 秒倒计时 |
| 下一步按钮 | 「验证通过,下一步」,需填入验证码后方可点击,点击后进入第二步 |
第二步:填写新手机号(换绑操作)
| 元素 | 说明 |
|---|---|
| 步骤提示 | 「第 2 步:填写新手机号并完成验证」 |
| 国际区号选择器 | 下拉选择,默认 +86,含国旗 + 区号 + 国家名,支持常用国家/地区(中国大陆、香港、澳门、台湾、美国/加拿大、英国、日本、韩国、新加坡、澳大利亚、德国、法国等) |
| 新手机号输入框 | 区号选择器右侧,输入新号码 |
| 验证码输入框 | 输入新手机号收到的验证码 |
| 发送验证码按钮 | 需先填入新手机号才可点击,60 秒独立倒计时 |
取消换绑:显示于字段标题右侧,点击后折叠表单、重置全部输入状态(含两步倒计时),不影响其他字段。
弹窗底部「保存」按钮统一处理昵称、头像、手机号三类变更,无需独立「确认换绑」按钮。点击保存时的判断如下:
若换绑表单未展开:
→ 直接保存昵称/头像,关闭弹窗
若处于第一步(旧号码验证中):
→ 阻止保存,提示「请先完成旧手机号验证,或取消换绑」
若处于第二步(新号码填写中):
新手机号为空 → 阻止保存,提示「请输入新手机号,或取消换绑」
新手机号填写但验证码空 → 阻止保存,提示「请输入新手机号收到的验证码」
新手机号 + 验证码均填写 → 校验验证码,通过后完成换绑,同步保存其他字段,关闭弹窗错误提示显示在保存按钮上方,右对齐,红色小字。
换绑通过后,弹窗内手机号字段即时更新为新号码(含区号前缀,如 +852-98765432),展开区域自动折叠,无需刷新页面。
| 场景 | 行为 |
|---|---|
| 换绑成功后,当前设备 | Session 保持有效,无需重新登录 |
| 换绑成功后,其他已登录设备 | 建议配置为强制重新登录(可作为安全策略开关) |
| 旧手机号尝试登录 | 返回「该手机号未注册」,拒绝发送验证码 |
| 新手机号登录 | 正常走验证码登录流程,命中同一用户账户 |
所有业务数据以用户 ID 为主键关联,手机号仅作登录凭证,换绑后无需数据迁移:
| 数据类型 | 影响 |
|---|---|
| 账单 / 充值 / 消费记录 | 不受影响,完整保留 |
| API Key | 不受影响,继续有效 |
| 邀请关系 / 佣金 | 不受影响 |
| 站内消息 | 不受影响 |
| 系统短信通知 | 换绑成功后自动切换至新手机号接收 |
| 后台按手机号搜索用户 | 需以用户 ID 为准,支持新旧手机号均可命中同一用户记录(脱敏展示) |
| 场景 | 处理策略 |
|---|---|
| 新手机号已被其他账户绑定 | 提交时实时校验,提示「该手机号已注册,请使用其他号码」 |
| 新手机号与当前号码相同 | 前端校验拦截,提示「新手机号不能与当前号码相同」 |
| 旧号码验证码错误超 3 次 | 锁定 10 分钟,提示解锁时间,换绑流程中断 |
| 新号码验证码错误超 3 次 | 同上,需重新从第一步发起 |
| 验证码过期 | 提示「验证码已过期」,引导重新发送 |
| 操作中途网络异常 | 事务回滚,手机号不变更,提示用户重试 |
| 旧手机号已停机无法收码 | 提供人工申诉通道,客服核实身份后后台操作换绑 |
每次换绑操作记录以下字段,支持后台按用户 ID、时间、IP 等维度筛选:
user_id 用户 ID
operated_at 操作时间(UTC)
ip 操作 IP
device 设备 / User-Agent
old_phone 旧手机号(脱敏,如 138****8888)
old_country_code 旧手机号国际区号
new_phone 新手机号(脱敏)
new_country_code 新手机号国际区号
result SUCCESS / FAILED
fail_reason 失败原因(验证码错误 / 号码已占用 / 超时 / 旧号码验证失败 等)| 问题 | 待定 |
|---|---|
| 换绑后其他设备是否强制下线? | 需产品确认 |
| 每日发送验证码上限 5 次是否合适? | 需结合短信成本与用户体验评估 |
| 换绑后 24 小时内禁止再次换绑是否启用? | 需产品 / 安全团队确认 |
| 旧号码停机时人工申诉的具体 SLA 和所需材料? | 需客服团队确认 |
将「验证通过,下一步」按钮改为 ghost variant,并设置为小号灰色文字,视觉权重明显低于保存按钮,避免与弹窗主操作形成竞争。禁用状态下颜色会进一步变淡,层次感更清晰。