启用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
相关产品推荐
相关产品推荐

