Краткий контекст: я оцениваю возможные решения для аутентификации для некоторых настраиваемых конечных точек для нашего 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
для извлечения некоторых пользовательских данных
То, что я делаю, это:
- звоните
GET /wp-json/my-site/nonce
, чтобы получить одноразовый номер - звоните
GET /wp-json/my-site/orders?_wpnonce=thepreviousnonce
Что Я получаю сообщение об ошибке:
{
"code": "rest_cookie_invalid_nonce",
"message": "Cookie nonce is invalid",
"data": {
"status": 403
}
}
Я просто использую браузер и URL-адреса для выполнения запросов, и я проверил, что файлы cookie включены в каждый запрос.
Что мне не хватает? Почему я получаю 403?