探探支持用户在同一设备上切换多个独立账号(如A账号、B账号),并通过手机号、微信等不同方式快速登录或切换。以下是具体实现逻辑和流程:
1. 多账号绑定与解绑
核心逻辑:
-
账号独立性 :每个账号(A/B)拥有独立的
user_id,数据完全隔离(如聊天记录、好友列表)。 -
多方式绑定:允许一个账号绑定多个登录方式(如A账号绑定手机号+微信),但不同账号的登录方式相互独立。
-
示例:
- A账号:绑定手机号138xxxx + 微信OpenID_1
- B账号:绑定手机号139xxxx + 微信OpenID_2
-
-
解绑机制:用户可在设置中解除某个登录方式与账号的绑定,解除后需重新登录。
技术实现:
-
数据库设计:
sqlsql 复制 -- 用户表(存储核心账号信息) CREATE TABLE users ( user_id VARCHAR(36) PRIMARY KEY, phone VARCHAR(11) UNIQUE, -- 手机号(可为空,若未绑定) wechat_openid VARCHAR(64) UNIQUE, -- 微信OpenID(可为空) created_at TIMESTAMP ); -- 登录方式关联表(记录账号与登录方式的绑定关系) CREATE TABLE login_methods ( user_id VARCHAR(36), method_type ENUM('phone', 'wechat', 'guest'), method_value VARCHAR(64), -- 手机号/微信OpenID/设备指纹 is_primary BOOLEAN DEFAULT FALSE, FOREIGN KEY (user_id) REFERENCES users(user_id) );
2. 账号切换流程
用户操作路径:
-
进入切换界面:点击"切换账号"按钮,进入已绑定账号列表。
-
选择目标账号:
- 若已绑定手机号/微信,直接输入密码或授权登录。
- 若未绑定,需通过注册流程(手机号验证/微信授权)创建新账号。
-
完成切换:旧账号Token失效,新账号Token生效,跳转至主页。
技术实现:
-
客户端逻辑:
- 本地缓存已绑定账号列表(如
A账号: {phone: 138xxxx}, B账号: {wechat: OpenID_2})。 - 用户选择账号后,调用登录接口(
/login)传入账号标识(手机号/微信OpenID)及凭证(密码/授权Code)。
- 本地缓存已绑定账号列表(如
-
服务端逻辑:
-
验证账号与凭证:
- 若通过手机号登录,校验密码或短信验证码。
- 若通过微信登录,校验OpenID及授权Code。
-
生成新Token:
- 返回新
access_token和refresh_token,并关联到目标user_id。
- 返回新
-
旧Token失效:
- 将原账号的Token加入黑名单(Redis中设置过期时间),后续请求携带旧Token会被拒绝。
-
3. 多登录方式切换(如微信换手机号)
场景:
用户当前通过微信登录A账号,现需切换为手机号登录同一A账号。
流程:
- 用户点击"切换登录方式",选择"手机号"。
- 输入A账号绑定的手机号,获取短信验证码并验证。
- 服务端校验手机号与A账号的绑定关系,返回新Token。
- 微信Token失效,后续请求需使用手机号Token。
技术关键点:
-
账号与登录方式解耦:
-
用户通过不同方式登录同一账号时,服务端需识别出
user_id并返回相同Token。 -
示例:
inipython 复制 # 通过微信OpenID查询关联的user_id user_id = db.query("SELECT user_id FROM login_methods WHERE method_type='wechat' AND method_value=OpenID_1") # 返回该user_id对应的Token
-
4. 多设备登录与冲突处理
场景:
用户A在手机1登录账号A,手机2尝试用同一账号登录。
处理逻辑:
-
默认策略:允许同一账号多设备登录,但敏感操作(如修改密码)需原设备确认。
-
强制下线:
- 若用户在新设备登录时勾选"强制下线其他设备",服务端将旧设备的Token加入黑名单。
- 旧设备下次请求时触发
401 Unauthorized,提示"账号已在其他设备登录"。
技术实现:
-
Token黑名单:
- 使用Redis存储失效Token,设置合理TTL(如7天)。
- 每次请求校验Token是否在黑名单中。
-
设备指纹:
- 记录设备信息(设备ID、IP、系统版本),用于冲突检测。
5. 安全性增强
关键措施:
-
二次验证:
- 异地登录、频繁切换账号时触发短信/人脸验证。
-
设备风控:
- 新设备登录时要求绑定手机或邮箱。
-
Token隔离:
- 不同登录方式生成独立Token(如微信Token无法用于手机号接口)。
6. 用户体验优化
-
快捷切换:
- 在登录页提供"最近使用账号"列表,减少重复输入。
-
自动登录:
- 勾选"记住账号"后,下次启动优先展示已绑定账号。
-
跨平台同步:
- 通过统一
user_id同步数据(如微信登录A账号后,同步通讯录好友)。
- 通过统一
总结
探探的多账号切换核心在于 账号体系解耦 (手机号/微信独立绑定)、动态Token管理 (旧Token失效+新Token生成)和 风控策略(设备/IP监测)。用户可通过手机号、微信或游客模式自由切换账号,同时通过Token隔离和黑名单机制保障数据安全。