# 遇到的一起生产事故

> 一次生产事故：手机号和微信没绑定，差点丢了一年的VIP

发布：2026-04-04 | 分类：计算机 | 标签：后端、生活


##

---

### 起因

前几天上班，新同事来找我帮忙。

他负责的一位用户想用自己的账号中的 ApiKey，结果提示要绑定手机号；绑定手机号又一直失败，搞不定，于是来请教。

我一听，觉得是个小 case——用户之前可能已经注册过，直接按手机号查一下后台，应该就能找到对应的账号。便让同事去查。

同事查完反馈：**后台只找到一个用户。**

我第一反应是手机号绑定功能有 bug，打算直接帮用户重置一下。结果——改完手机号之后，用户那边炸了：账号不对了，原本的 VIP 消失不见，还有一年的会员没到期呢。

这下我有点慌。毕竟，这是我第一次碰上生产环境的事故。

冷静下来，我把同事和用户的聊天记录要过来翻了一遍。终于发现——**漏了一个关键信息：用户的 ID。**

同事反馈时只提了手机号，我也是照着手机号去查的，所以在线上数据库里只查到了一个人。

但仔细一看，我又发现了一个"很新的 ID"——查了一下，这个 ID 下没有任何手机号，只有一个 open_id（微信的）。

事情一下子清晰了。

---

### 原因

我们网站支持两种登录方式：

- 手机号注册登录

- 微信扫码登录

**问题来了：这两种登录方式之间没有绑定关系。**

也就是说，手机号注册的账号和微信扫码的账号，是两个独立账户。数据不互通，VIP 不共享，key 也是分开的。

这位用户的情况是这样的：

1. 先用**手机号**注册了一个账号（账号 A），使用了一段时间，快要到期

2. 后来又用**微信扫码**登录，网站自动为他创建了一个新账号（账号 B）

3. 用户以为这是同一个账号，但实际是两个独立账户

4. 当同事按手机号去查，只能查到账号 A，账号 B 完全不在查询范围内

这就是为什么后台只显示一个用户，而用户却发现自己的 VIP "消失"了——VIP 在账号 B 里，根本不在同事查到的那个账号里。

---

### 解决办法

事后我们讨论了两种解法：

**强制绑定。** 当用户用微信扫码登录后，系统自动检测是否已存在相同手机号或微信的关联账号，如有则提示用户主动合并两个账户，合并后数据汇总，保留两个登录入口。

**登录时引导绑定。** 用户使用任一方式登录后，若检测到账号未绑定其他登录方式，主动弹出引导页，提示用户"绑定后可使用两种方式登录同一账号"。

**短期应急。** 目前临时方案是用户在账号找回时遇到问题，可联系客服人工核实身份后，手动合并两个账号。

---

### 吐槽

前同事写的后端，怎么连这个基本的东西都没做……

不过目前尚且够用，也就先不改了。
