WooCoommerce自定义端点-启用身份验证保护

时间:2019-10-10 09:44:24

标签: wordpress woocommerce wordpress-rest-api woocommerce-rest-api

我为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身份验证密钥来访问它)。

谢谢!

2 个答案:

答案 0 :(得分:1)

您好将permission_callbackJWT 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