You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 06:27:11