用户先用微信登录,后来又用 QQ 登录,后台多出两个账号,文章和订单分散在三个 ID 下,客服合并了两次还没合完。日志里能对上时间点,这种反而好排。

第三方登录只看 openid 是否存在于当前平台,没按邮箱或手机号找已有账号。新平台第一次登录时直接走注册分支,没有绑定已有账号的环节。这一点先确认清楚,后面就不用反复试。

$uid = $wpdb->get_var($wpdb->prepare(
  "SELECT user_id FROM {$wpdb->prefix}oauth_bind WHERE provider=%s AND openid=%s",
  'wechat', $openid
));
// 为空时再按 email 匹配,仍未命中才创建新用户

「第三方登录重复建号」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

处理上按这个顺序:登录回调里先按平台 openid 查绑定表,查不到再按邮箱匹配已有账号;匹配到就提示绑定到已有账号,别默认新建;绑定表加上平台加 openid 的唯一索引,防重复写入;用同一个邮箱分别走微信和 QQ 登录,看是否落到同一个账号。

结果对不对很好判断,同一邮箱用两种方式登录落到同一个账号,用户中心里能看到两条绑定记录。

作者 9823189