Пользовательская конечная точка WooCoommerce - Включите защиту аутентификации - PullRequest
0 голосов
/ 10 октября 2019

Я определил следующую настраиваемую конечную точку для 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.

Как я могузащитить его так же, как и все остальные стандартные конечные точки API WooCommerce? (Я бы предпочел, чтобы для этого не понадобился другой плагин аутентификации, а вместо этого получить к нему доступ с помощью стандартных ключей аутентификации WooCommerce).

Спасибо!

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Здравствуйте, используйте 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.

Проверено и хорошо работает.

0 голосов
/ 31 октября 2019

Проверка подлинности с использованием 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

...