注册后收到验证邮件,点链接回到站点只显示一个空白页,调试日志里也没有明显报错,用户以为没注册上。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
$data = $uid . '|' . $exp;
$sig = hash_hmac('sha256', $data, wp_salt('auth'));
if (!hash_equals($sig, $_GET['sig']) || $exp < time()) {
wp_die('链接已失效');
}
验证签名用 md5 拼了时间戳,服务器时区与生成时不一致,怎么点都对不上,链接从一开始就是死的,查日志也看不出,只能从头查起。这一点先确认清楚,后面就不用反复试。
「WordPress 邮箱验证链接」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。
改完隔一天再看一次,当场正常不代表能稳住。
具体做法是,改用带站点盐的哈希来重新生成一段验证签名;校验的时候只比较签名与过期时间这两个值就行;失败的时候给出明确提示,不要只留一个空白页。
改完照着核一遍,新注册账号点邮件链接直接通过验证,过期链接提示已失效。
