探探支持用户在同一设备上切换多个独立账号(如A账号、B账号),并通过手机号、微信等不同方式快速登录或切换。以下是具体实现逻辑和流程:
1. 多账号绑定与解绑
核心逻辑:
账号独立性 :每个账号(A/B)拥有独立的 user_id,数据完全隔离(如聊天记录、好友列表)。
多方式绑定:允许一个账号绑定多个登录方式(如A账号绑定手机号+微信),但不同账号的登录方式相互独立。
示例:
A账号:绑定手机号138xxxx + 微信OpenID_1
B账号:绑定手机号139xxxx + 微信OpenID_2
解绑机制:用户可在设置中解除某个登录方式与账号的绑定,解除后需重新登录。
技术实现:
数据库设计:
sql
复制代码
sql
复制
-- 用户表(存储核心账号信息)
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。
示例:
ini
复制代码
python
复制
# 通过微信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隔离和黑名单机制保障数据安全。