$exists = email_exists($email);
// 两种情况都返回同一句,不透露结果
wp_send_json_success(array('msg' => '如果邮箱可用,验证邮件已发送'));
用已注册的邮箱再注册,提示该邮箱已注册请直接登录,换个没注册过的邮箱就提示注册成功请查收邮件。两条文案摆在一起,账号存不存在一目了然。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:注册接口把唯一键冲突和应用层校验分开处理,数据库报 duplicate 时暴露了真实原因,正常路径又走了另一套文案。两套分支没统一,等于把用户表当查询接口用。
「注册邮箱枚举」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。
处理上按这个顺序:两条分支合成一句中性提示,统一成如果该邮箱可用验证邮件已发送;不管邮箱是否存在都返回 200,页面跳到同一个去查收邮件页;写入用户表前先查一次,存在就走找回密码流程,对外文案不变;用两个邮箱各试一遍,比较响应体长度和状态码是否一致。
确认没问题再收工,两种邮箱提交后页面和响应体完全一样,抓包也看不出差别。
