WordPress中获取非管理员已登录用户信息的技术问题
WordPress自定义REST端点获取登录用户数据问题解决
核心问题原因
你手动引入wp-load.php的方式破坏了WordPress REST API的内置认证流程,导致get_current_user_id()和wp_get_current_user()无法识别登录用户,返回0或无效对象。手动解析LOGGED_IN_COOKIE不仅不安全(跳过了WP的cookie签名验证),还只能拿到用户名,无法获取完整用户数据。
另外,默认wp-json/wp/v2/users端点对非管理员用户的权限限制较严,未发布文章的用户可能无法通过该端点获取自身信息,所以需要自定义端点并正确处理权限。
解决方案步骤
- 通过官方钩子注册端点:使用
rest_api_init钩子注册自定义端点,确保WP环境和认证机制完整初始化。 - 利用WP内置认证获取用户:无需手动解析cookie,依赖WP的REST认证(支持cookie、JWT等方式)自动识别登录用户。
- 安全返回用户数据:只返回当前登录用户自身的合法字段,避免权限泄露。
修正后的代码示例
class Custom_User_Endpoint { public function __construct() { add_action( 'rest_api_init', array( $this, 'register_endpoints' ) ); } public function register_endpoints() { register_rest_route( 'custom/v1', '/current-user', array( 'methods' => 'GET', 'callback' => array( $this, 'get_current_user_data' ), 'permission_callback' => array( $this, 'check_permission' ) ) ); } // 权限验证:确保用户已登录 public function check_permission() { return is_user_logged_in(); } public function get_current_user_data( $request ) { // 直接使用WP内置方法获取当前用户,无需手动引入wp-load.php $current_user = wp_get_current_user(); // 提取需要的用户字段,可根据需求添加 $user_data = array( 'id' => $current_user->ID, 'username' => $current_user->user_login, 'email' => $current_user->user_email, 'display_name' => $current_user->display_name, 'first_name' => $current_user->first_name, 'last_name' => $current_user->last_name ); return rest_ensure_response( $user_data ); } } // 初始化端点 new Custom_User_Endpoint();
关键说明
- 权限控制:
permission_callback确保只有登录用户能访问该端点,符合安全要求。 - 数据完整性:无论用户是否发布过文章,只要登录就能获取自身的基础信息,无需依赖用户的文章状态。
- 安全性:避免了手动解析cookie的风险,所有用户数据通过WP官方方法获取,保证数据合法有效。
内容的提问来源于stack exchange,提问作者artistAhmed
相关产品推荐
相关产品推荐

