【问题标题】:WooCommerce - Restrict API access to user IDWooCommerce - 限制对用户 ID 的 API 访问
【发布时间】:2022-10-18 18:48:43
【问题描述】:

我只是在 Woocommerce 中使用 REST API 让我的脚湿透了,因此非常感谢任何建议。 我正在构建一个应用程序,让用户下载他们的数字产品。身份验证通过 JWT 完成。 要检索客户下载,我需要使用端点/wp-json/wc/v3/customers/id/downloads.似乎我可以让这个端点工作的唯一方法是将客户角色权限授予“list_users"。这很好用,但我注意到 JWT 令牌可用于访问/wp-json/wc/v3/customers,这将列出网站上的所有客户。 我将如何过滤服务器端的 API 请求以仅显示经过身份验证的用户的数据?

【问题讨论】:

    标签: wordpress api rest woocommerce jwt


    【解决方案1】:

    您可以使用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;
    
    } );
    

    【讨论】:

    • 非常感谢你的回复!从公众视野中有效地阻止 /wp-json/wc/v3/customers。还有一个问题。当我使用完整的端点 (/wp-json/wc/v3/customers/id/downloads) 时,我仍然可以将 ID 号更改为我想要的任何内容并查看其他客户的下载。例如,如果我是客户 ID 2,我可以输入 /wp-json/wc/v3/customers/3/downloads 并查看客户 ID 3 的下载。有没有办法将 ID 限制为用户从智威汤逊令牌?
    • 现在我给客户“list_users”的权限。这似乎是他们访问下载内容的唯一方式。也许还有更好的方法来做到这一点?
    • /wc/v3/customers/(?P<id>[d]+) seems to work, but /wc/v3/customers/(?P<id>[d]+)/downloads does not. Thanks again for the reply.
    • 你可以看看Woocomerce REST API 显然也有一个批处理端点:/wp-json/wc/v3/customers/batch。您可能想尝试/wc/v3/customers/(?P&lt;id&gt;[d]+/download) 我已经在正则表达式测试器中对其进行了测试,它似乎工作正常。如果我设法以任何方式帮助您,请不要忘记投票并接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 2017-08-11
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 2012-02-26
    相关资源
    最近更新 更多