Вопрос или проблема
Я пытаюсь получить данные предпросмотра через WP Rest API, используя такой URL, как /wp-json/wp/v2/pages/1140/revisions/1653
.
Также включен дополнительный заголовок: 'X-WP-Nonce': <nonce>
– nonce получен из WP.
Почему я получаю ошибку 401 unauth? Спасибо
{ code: 'rest_cannot_read',
2020-07-21T11:45:35.930292+00:00 app[web.1]: message: 'Извините, у вас нет разрешения на просмотр ревизий этого поста.',
2020-07-21T11:45:35.930293+00:00 app[web.1]: data: { status: 401 } }
Решением было создать и использовать токен API.
- в админке WP перейдите к пользователю и сгенерируйте ключ
- возьмите этот ключ и объедините его с именем пользователя, с которым он был сгенерирован, в следующем формате:
username:key
- проведите кодирование этой строки в base64
- вставьте это значение base64 в заголовок:
'Authorization': 'Basic <base64 token здесь>'
В моем случае ключ был удален.
Ответ или решение
Ошибка 401 "Unauthenticated" (неаутентифицирована) в API REST WordPress может возникнуть по нескольким причинам, и понимание механизма аутентификации WordPress является ключом к решению данной проблемы. Рассмотрим этот вопрос подробно.
Причины возникновения ошибки 401
Когда вы пытаетесь получить доступ к определённым ресурсам через API, таких как /wp-json/wp/v2/pages/1140/revisions/1653
, WordPress требует подтверждения ваших прав доступа. Ошибка 401 указывает на то, что система не смогла аутентифицировать ваш запрос, что недопустимо для редактируемых ресурсов, таких как записи и их ревизии.
В вашем случае ошибка, с которой вы столкнулись, следующая:
{
code: 'rest_cannot_read',
message: 'Sorry, you are not allowed to view revisions of this post.',
data: { status: 401 }
}
Это сообщение говорит о том, что у учетной записи, которая пытается получить доступ к запрашиваемой ревизии, недостаточно прав для её просмотра.
Решение проблемы
Исходя из описания вашей проблемы, решение заключается в корректной настройке аутентификации. Вот шаги, которые могут помочь вам обеспечить правильный доступ к данным API:
-
Создание ключа API: Перейдите в админку WordPress, зайдите в раздел пользователей и создайте ключ API, если его у вас ещё нет.
-
Формирование строки для аутентификации: После генерации ключа соедините его с именем пользователя, с которым он был создан, следующим образом:
username:key
-
Шифрование строки: Полученную строку необходимо закодировать методом Base64. Это можно сделать с помощью онлайн-инструментов или с использованием встроенных функций на языке программирования, который вы используете для выполнения запроса.
-
Добавление заголовка авторизации: В заголовок вашего запроса добавьте следующую строку:
'Authorization': 'Basic <base64 token here>'
-
Проверка прав пользователя: Убедитесь, что учетная запись пользователя, для которой вы создаете ключ, обладает необходимыми правами для просмотра ревизий. Для этого можно проверить ролe пользователя, которая должна включать права на чтение записей.
Заключение
Ошибки аутентификации в API WordPress — это распространённая проблема, но, как показывает практика, достаточно следовать шагам, подробно изложенным выше, чтобы обеспечить правильный доступ к необходимым данным. В случае, если ключ API был удалён или утерян, его следует заново сгенерировать, чтобы избежать дальнейших проблем.
Если же ошибка продолжает появляться даже после выполнения всех инструкций, рекомендую проверить конфигурацию плагинов безопасности, которые могут ограничивать доступ к REST API, или обратиться к документации разработчиков WordPress для получения дополнительных подсказок.