WooCommerce-限制API访问用户ID



我刚开始在Wooccommerce中使用REST API,所以非常感谢任何建议。我正在开发一款应用程序,让用户下载他们的数字产品。通过JWT进行身份验证。要检索客户下载,我需要使用端点/wp-json/wc/v3/customers/id/downloads。似乎我能让这个端点工作的唯一方法是赋予"客户角色"权限list_users";。这很好,但我注意到JWT令牌可以用于访问/wp-json/wc/v3/customers,它将列出网站上的所有客户。我将如何在服务器端过滤API请求以仅显示已验证用户的数据?

您可以使用is_user_logged_in()user_can()来限制与rest_endpoints挂钩耦合的特定端点,该挂钩用于过滤可用REST API端点的数组。

<?php
add_filter( 'rest_endpoints', function( $public_endpoints ) {
$private_endpoints = array(
'/wp/v2/users',
'/wp/v2/users/(?P<id>[d]+)',
'/wc/v3/customers',
'/wc/v3/customers/(?P<id>[d]+/download)',
'/wc/v3/customers/batch',
//...
);
foreach ( $public_endpoints as $public_endpoint => $value ) {
$user_id = get_current_user_id();
if ( in_array( $public_endpoint, $private_endpoints, false ) ) {
if ( ! is_user_logged_in() || ! user_can( $user_id, 'export' ) ) {
unset( $public_endpoints[$public_endpoint] );
};
};
};
return $public_endpoints;
} );

最新更新