我为woocommerce定义了以下自定义端点:
add_action( 'rest_api_init', 'custom_endpoint' );
function custom_endpoint() {
register_rest_route( 'wc/v3', 'my_custom_endpoint', array(
'methods' => 'GET',
'callback' => 'return_value',
) );
}
function return_value() {
return "this is my custom endpoint!";
}
但是,如果未使用ck和cs进行身份验证,则也可以访问此端点。
如何以相同的方式保护WooCommerce API的所有其他默认端点? (我希望此功能不需要其他身份验证插件,而可以使用标准的WooCommerce身份验证密钥来访问它)。
谢谢!
答案 0 :(得分:1)
您好将permission_callback
与JWT Authentication for WP REST API
插件配合使用,这样就可以正常工作。
步骤:
1)安装JWT Authentication for WP REST API
插件
2)设置permission_callback
安装JWT Authentication for WP REST API
插件后,下面的代码将很好地工作
add_action('rest_api_init', 'custom_endpoint');
function custom_endpoint(){
register_rest_route('wc/v3', 'my_custom_endpoint', array(
'methods' => 'GET',
'callback' => 'return_value',
'permission_callback' => function($request){
return is_user_logged_in();
}
));
}
function return_value(){
return "this is my custom endpoint!";
}
有关更多信息,请查看JWT Authentication for WP REST API
文档。
经过检查,效果很好。
答案 1 :(得分:0)
Cookie身份验证是WordPress随附的标准身份验证方法。登录到仪表板时,这将为您正确设置cookie,因此插件和主题开发人员仅需要具有登录用户即可。
作为示例,这是内置Javascript客户端如何创建随机数:
<?php
wp_localize_script( 'wp-api', 'wpApiSettings', array(
'root' => esc_url_raw( rest_url() ),
'nonce' => wp_create_nonce( 'wp_rest' )
) );
然后在基本模型中使用它:
options.beforeSend = function(xhr) {
xhr.setRequestHeader('X-WP-Nonce', wpApiSettings.nonce);
if (beforeSend) {
return beforeSend.apply(this, arguments);
}
};
以下是使用jQuery AJAX编辑帖子标题的示例:
$.ajax( {
url: wpApiSettings.root + 'wp/v2/posts/1',
method: 'POST',
beforeSend: function ( xhr ) {
xhr.setRequestHeader( 'X-WP-Nonce', wpApiSettings.nonce );
},
data:{
'title' : 'Hello Moon'
}
} ).done( function ( response ) {
console.log( response );
} );
请注意,您无需验证自定义端点内的随机数有效。这是为您自动完成的 rest_cookie_check_errors()
Woocommerce API
https://woocommerce.github.io/woocommerce-rest-api-docs/?php#authentication-over-https
虽然cookie身份验证是唯一的身份验证机制 可以在WordPress中本地使用,可以添加插件来支持 可以从远程工作的替代身份验证模式 应用程序。
根据正式文件:https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/#authentication-plugins