WordPress自定义REST API路由POST请求报403权限错误求助
WordPress自定义REST路由POST请求403错误解决办法
检查权限回调配置
注册自定义路由时,permission_callback参数默认是__return_false,会直接拒绝所有请求。你得改成符合需求的权限逻辑,比如允许登录用户访问:register_rest_route( 'your-namespace/v1', '/your-route', array( 'methods' => 'POST', 'callback' => 'your_callback_function', 'permission_callback' => function() { // 允许所有登录用户 return is_user_logged_in(); // 测试阶段可以直接返回true(生产环境别这么搞) // return true; } ) );必须携带有效的REST nonce令牌
WordPress REST API的POST请求要求带wp_restnonce,否则直接返回403。前端要这么做:- 先在页面里通过PHP输出nonce:
wp_localize_script( 'your-script-handle', 'wpApiSettings', array( 'root' => esc_url_raw( rest_url() ), 'nonce' => wp_create_nonce( 'wp_rest' ) ) ); - 然后在Ajax请求的headers里加上这个令牌:
fetch( wpApiSettings.root + 'your-namespace/v1/your-route', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': wpApiSettings.nonce }, body: JSON.stringify( { /* 你的请求数据 */ } ) } );
- 先在页面里通过PHP输出nonce:
排查安全插件或XML-RPC限制
像Wordfence这类安全插件可能会限制REST API的POST请求,或者你禁用了XML-RPC(部分场景会影响权限验证)。可以先临时禁用安全插件测试,或者在插件设置里放行你的自定义路由。确认路由支持POST方法
注册路由时的methods参数要明确包含POST,比如写'methods' => 'POST',或者用WP_REST_Server::CREATABLE,别只设置成支持GET请求,不然POST会被直接拒绝。
内容的提问来源于stack exchange,提问作者Daniel_Ranjbar
相关产品推荐
相关产品推荐

