Как получить пользователя из REST API с помощью авторизации на основе cook ie - PullRequest
0 голосов
/ 19 апреля 2020

Краткий контекст: я оцениваю возможные решения для аутентификации для некоторых настраиваемых конечных точек для нашего WIP-сайта без WordPress.

То, что я пытаюсь достичь , делает is_user_logged_in вернуть true в моей пользовательской конечной точке, используя аутентификацию на основе cook ie.


Вот мои текущие настройки и вот что я пробовал.

У меня есть следующее в functions.php

// create an endpoint for getting a nonce
function get_nonce() {
    return new WP_REST_Response(array('nonce' => wp_create_nonce( 'wp_rest' )));
}
add_action( 'rest_api_init', function () {
    register_rest_route('my-site', 'nonce', array(
        'methods' => 'GET',
        'callback' => __NAMESPACE__ . '\get_nonce'
    ));
} );
function get_orders() {
    if ( !is_user_logged_in() ) {
        return new WP_Error( 'not_authorized', 'You are not logged in', array('status' => 401) );
    }

    $orders = // ...

    return new WP_REST_Response($orders);
}
add_action( 'rest_api_init', function () {
    register_rest_route( 'my-site', 'orders', array(
        'methods' => 'GET',
        'callback' => __NAMESPACE__ . '\get_orders',
    ));
} );

Итак, в итоге это создает две конечные точки:

  • /wp-json/my-site/nonce для генерации одноразового номера
  • /wp-json/my-site/orders для извлечения некоторых пользовательских данных

То, что я делаю, это:

  1. звоните GET /wp-json/my-site/nonce, чтобы получить одноразовый номер
  2. звоните GET /wp-json/my-site/orders?_wpnonce=thepreviousnonce

Что Я получаю сообщение об ошибке:

{
  "code": "rest_cookie_invalid_nonce",
  "message": "Cookie nonce is invalid",
  "data": {
    "status": 403
  }
}

Я просто использую браузер и URL-адреса для выполнения запросов, и я проверил, что файлы cookie включены в каждый запрос.

Что мне не хватает? Почему я получаю 403?

1 Ответ

1 голос
/ 19 апреля 2020

одноразовый номер, который вы генерируете, недействителен. создание одноразового номера в контексте покоя не работает, потому что для этого также нужен одноразовый номер! то, что он возвращает, это одноразовый номер пользователя. если вам нужна аутентификация на основе токена, я рекомендую JWT wp rest auth документация

...