更新记录
1.0.0(2026-06-10) 下载此版本
111
平台兼容性
微信快捷登录绑定手机号联调开发文档
版本:v1.0
日期:2026-06-09
范围:微信小程序快捷登录后,校验是否绑定手机号;未绑定则只允许进入绑定手机号流程。
目标
微信快捷登录成功后,用户必须完成手机号绑定后才能使用账号功能。前端当前会在微信登录拿到 token 后立即调用安全手机查询接口进行校验:
POST /user/login/wechat获取 token。GET /user/secure-phone校验当前账号是否已有有效手机号。- 若未绑定,提示用户去
/pages/login/bind-phone。 - 未绑定期间,前端只放行查询安全手机、发送绑定验证码、提交绑定手机号这三个接口。
- 用户在强制绑定页退出且未绑定成功,前端会清空登录态。
数据表依据
手机号不要放在 user 表中判断。当前账号体系中,相关表职责如下:
| 表名 | 用途 | 关键字段 |
|---|---|---|
user |
用户主体 | id, nickname, avatar_url, status |
user_wechat_identity |
微信小程序登录凭证 | user_id, identity_type, identifier, status, last_login_at |
user_auth_identity |
通用登录身份,手机号身份使用 mobile |
user_id, identity_type, identifier, status |
user_secure_phone |
安全手机号/绑定手机号 | user_id, phone, is_valid |
绑定完成后建议同时满足:
| 条件 | 说明 |
|---|---|
user_auth_identity 存在 identity_type = mobile |
用户可通过手机号登录或被家庭成员按手机号查找 |
user_secure_phone 存在 is_valid = 1 |
安全手机查询接口可返回手机号 |
前端当前契约
1. 微信快捷登录
POST /user/login/wechat
请求:
{
"code": "wx.login 返回的一次性 code"
}
成功响应:
{
"code": 200,
"message": "操作成功",
"data": {
"token": "jwt-token",
"user": {
"id": 10001,
"nickname": "微信用户_123456",
"avatarUrl": ""
},
"isNewUser": false,
"needBindPhone": true,
"loginType": "wechat_mp"
}
}
字段要求:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
token |
string | 是 | 后续接口使用 Authorization: Bearer <token> |
user.id |
number | 是 | 用户主键 |
user.nickname |
string | 否 | 昵称 |
user.avatarUrl |
string | 否 | 头像 |
isNewUser |
boolean | 建议 | 是否本次自动创建用户 |
needBindPhone |
boolean | 建议 | 后端判断是否需要绑定手机号 |
loginType |
string | 建议 | 固定建议为 wechat_mp |
前端说明:
- 前端会保存 token。
- 前端不会只依赖
needBindPhone,会继续调用GET /user/secure-phone做最终校验。 - 如果
GET /user/secure-phone返回空手机号、非 11 位手机号或接口失败,前端都会进入强制绑定流程。
2. 查询安全手机号
GET /user/secure-phone
请求头:
Authorization: Bearer <token>
已绑定响应:
{
"code": 200,
"message": "操作成功",
"data": {
"phone": "***"
}
}
未绑定响应:
{
"code": 200,
"message": "操作成功",
"data": {
"phone": ""
}
}
前端判断:
/^1\d{10}$/.test(data.phone)
只有命中 11 位手机号格式才视为已绑定。
3. 发送绑定手机号验证码
POST /user/sms/send
请求头:
Authorization: Bearer <token>
请求:
{
"phone": "***",
"scene": "bind_phone_after_wechat"
}
要求:
scene = bind_phone_after_wechat时必须校验登录态。- 该接口要允许“微信已登录但未绑定手机号”的临时用户调用。
- 验证码建议 5 分钟有效。
4. 绑定手机号
POST /user/phone/bind
请求头:
Authorization: Bearer <token>
请求:
{
"phone": "***",
"code": "123456"
}
成功响应:
{
"code": 200,
"message": "操作成功",
"data": {
"phone": "***"
}
}
绑定成功后后端应写入或确认:
| 表 | 处理 |
|---|---|
user_auth_identity |
若当前用户没有 mobile 身份,则新增;手机号被其他用户占用时拒绝 |
user_secure_phone |
若当前用户没有有效安全手机,则新增 is_valid = 1;手机号被其他用户占用时拒绝 |
推荐错误码:
| 场景 | code | message |
|---|---|---|
| 验证码过期 | 1005 |
验证码已过期 |
| 验证码错误 | 1006 |
验证码错误 |
| 手机号被其他账号绑定 | 1007 |
手机号已绑定 |
| 当前账号已绑定手机号 | 1007 或业务自定义码 |
当前账号已绑定手机号 |
后端推荐权限规则
前端已经做了未绑定状态拦截,但后端如果要严格保证“未绑定手机号没有使用权限”,建议在鉴权通过后增加一层手机号绑定校验。
放行接口
未绑定手机号的已登录用户必须能调用:
| 路径 | 原因 |
|---|---|
GET /user/secure-phone |
前端进入前校验绑定状态 |
POST /user/sms/send 且 scene = bind_phone_after_wechat |
获取绑定验证码 |
POST /user/phone/bind |
提交绑定手机号 |
登录注册、忘记密码等未登录接口继续按现有白名单处理。
拦截逻辑建议
1. AuthenticationInterceptor 校验 JWT,解析 userId。
2. 若请求路径属于绑定手机号放行列表,直接放行。
3. 查询 user_secure_phone 是否存在 user_id = 当前用户 且 is_valid = 1。
4. 若不存在,返回 PHONE_NOT_BOUND:
code = 1004
message = 手机号未绑定
solution = 请先完成手机号绑定
5. 若存在,放行后续业务接口。
注意:
- 不建议通过
user.phone判断,因为user表没有手机号字段。 - 如果要同时要求手机号登录身份存在,可再检查
user_auth_identity是否存在identity_type = mobile。 - 为避免每个请求都查库,可以后续考虑 JWT claim 或短期缓存;第一版联调建议先查
user_secure_phone,逻辑更直观。
前端已完成的配合点
| 文件 | 行为 |
|---|---|
common/session.js |
新增 pending_bind_phone 状态、手机号缓存、强制跳转工具 |
common/request.js |
未绑定状态下只放行 secure-phone、sms/send、phone/bind |
pages/login/login.vue |
微信登录后调用 GET /user/secure-phone 做最终校验 |
pages/login/bind-phone.vue |
强制绑定状态下,未绑定退出会清空登录态 |
pages/home/home.vue |
主入口发现待绑定状态时跳绑定页 |
pages/control/control.vue |
主入口发现待绑定状态时跳绑定页 |
pages/mine/mine.vue |
主入口发现待绑定状态时跳绑定页 |
pages/addDevice/addDevice.vue |
添加设备入口发现待绑定状态时跳绑定页 |
联调测试用例
| 用例 | 准备数据 | 预期结果 |
|---|---|---|
| 微信首次登录,无手机号 | user_wechat_identity 可创建,user_secure_phone 无记录 |
登录后弹窗提示绑定手机号,确认后进入绑定页 |
| 未绑定用户点击首页/控制/我的 | 本地存在 token 和 pending_bind_phone |
自动跳绑定页 |
| 未绑定用户请求设备/家庭接口 | 本地存在 pending_bind_phone |
前端拦截并提示先绑定手机号 |
| 未绑定用户发送绑定验证码 | 有 token,scene = bind_phone_after_wechat |
后端发送验证码成功 |
| 绑定手机号成功 | 验证码正确,手机号未被占用 | 写入手机号身份和安全手机号,前端进入首页 |
| 绑定页未绑定直接返回 | 强制绑定状态 | 前端清空登录态并回登录页 |
| 已绑定用户微信登录 | user_secure_phone.is_valid = 1 |
登录后直接进入首页 |
| 手机号被其他账号占用 | 目标手机号已在其他用户绑定 | 后端返回手机号已绑定,前端展示错误 |
和现有文档的差异
docs/wechat-login-api.md 更偏向微信登录基础接口;本文档补充的是“微信登录后手机号绑定权限”的联调契约。后续如果后端完成强权限拦截,建议把本文档作为验收标准。

收藏人数:
下载插件并导入HBuilderX
赞赏(0)
下载 1
赞赏 0
下载 12209969
赞赏 1918
赞赏
京公网安备:11010802035340号