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

启用JWT后,如何让任意用户角色通过WooCommerce REST API添加评论?

问题描述

我在使用WooCommerce REST API的/wp-json/wc/v3/products/reviews接口创建商品评论时遇到权限问题:原本任意用户都能提交评论,但启用JWT Authentication for WP-API插件后,只有高权限用户(比如Admin)能成功调用接口,低权限角色请求时会返回403错误:

{
    "code": "woocommerce_rest_cannot_create",
    "message": "Sorry, you are not allowed to create resources.",
    "data": {
        "status": 403
    }
}

不管低权限用户请求时带不带Bearer Token都没用,只有Admin的Token能正常工作。现在需要让任意用户角色都能通过这个API添加商品评论,求解决办法。


解决办法

1. 修改WooCommerce API的权限校验逻辑

WooCommerce默认给创建评论的API设置的权限是publish_posts,这个权限只有编辑及以上角色才有。我们可以通过钩子替换权限校验规则,让所有用户(包括未登录用户)都能调用该接口:

在主题的functions.php文件(推荐用子主题,避免主题更新丢失代码)或者自定义插件中添加以下代码:

add_filter( 'woocommerce_rest_product_review_collection_params', 'allow_all_users_create_product_reviews' );
function allow_all_users_create_product_reviews( $params ) {
    // 替换创建评论的权限校验回调
    $params['create']['permission_callback'] = function() {
        // 允许所有用户(含未登录):直接return true
        // 仅允许登录用户:return is_user_logged_in();
        return true;
    };
    return $params;
}

2. 让JWT插件跳过该接口的验证(可选)

如果需要支持未登录用户提交评论,得让JWT插件不对这个API路径做授权校验,添加以下代码:

add_filter( 'jwt_auth_whitelist', 'whitelist_product_reviews_api' );
function whitelist_product_reviews_api( $endpoints ) {
    $endpoints[] = '/wp-json/wc/v3/products/reviews';
    return $endpoints;
}

3. 测试验证

添加代码后,分别用低权限用户(比如订阅者)携带Bearer Token、未登录用户直接发送POST请求到/wp-json/wc/v3/products/reviews,如果能成功创建评论,说明配置生效。

额外提醒

  • 开放权限后容易收到垃圾评论,建议配合验证码、自动审核机制一起使用
  • 自定义插件的方式比修改主题functions.php更稳定,长期维护推荐用插件

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:52:11