WordPress-BuddyPress Messages REST API 403权限问题求助
解决方案
问题根源
BuddyPress的REST API消息接口默认权限逻辑仅允许管理员/版主访问消息数据,即便JWT已正确认证用户身份,普通用户仍无法访问自身消息,导致403错误。
修复步骤
1. 添加自定义权限过滤代码
将以下代码添加到主题functions.php文件或自定义插件中,修改BuddyPress的权限检查逻辑,允许用户访问自己的消息:
add_filter( 'bp_rest_messages_get_items_permissions_check', 'bp_rest_allow_own_messages_access', 10, 2 ); function bp_rest_allow_own_messages_access( $permission, $request ) { $current_user = wp_get_current_user(); $target_user_id = isset( $request['user_id'] ) ? (int) $request['user_id'] : 0; // 允许已认证用户访问自身消息 if ( $current_user->ID && $current_user->ID === $target_user_id ) { return true; } // 保留原有管理员/版主权限规则 return $permission; }
2. 验证JWT认证的用户身份
确保JWT插件正确初始化当前用户,可临时添加调试代码确认:
add_action( 'rest_api_init', function() { error_log( 'JWT Authenticated User ID: ' . get_current_user_id() ); });
调用接口后查看wp-content/debug.log,确认输出的用户ID与token中的user.id完全一致。
3. 测试接口
使用普通用户的JWT Token重新调用/wp-json/buddypress/v1/messages?box=inbox&user_id=2,此时应返回200状态码及目标用户的消息数据。
原理说明
这段代码通过bp_rest_messages_get_items_permissions_check钩子拦截BuddyPress的权限检查流程,当当前认证用户ID与请求参数中的user_id匹配时,直接放行权限,同时保留原有的管理员权限规则,不会影响其他功能的权限控制。
内容的提问来源于stack exchange,提问作者ginfoart
相关产品推荐
相关产品推荐

