前端带着登录 Cookie 调自定义接口仍然返回 401,同域下默认的文章接口却能正常拿到数据,换个页面同样如此。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

register_rest_route('mysite/v1', '/me', [
  'methods' => 'GET',
  'callback' => 'my_me',
  'permission_callback' => fn() => is_user_logged_in(),
]);

权限回调只写了能力判断却没带 nonce,或者回调返回的是空值而不是布尔值,鉴权在进入业务逻辑前就被拒绝了。这一点先确认清楚,后面就不用反复试。

「REST 权限回调」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

具体做法是,先把权限回调临时改成返回 true 验证整条链路;前端请求头里补上当前会话的 X-WP-Nonce;确认 Cookie 与 nonce 来自同一个登录会话。

改完照着核一遍,登录态下返回 200,未登录访问仍按预期返回 401。

作者 9823189