проблема аутентификации с REST API - rest_cannot_create

13 мая 2018 г., 21:08:09
Просмотры: 27K
Голосов: 5

Я использую REST API в WordPress. Для аутентификации я использую плагин Basic Authentication (JSON Basic Authentication)

Я использую этот запрос (как из Postman, так и из NodeJS):

POST /wp-json/wp/v2/posts HTTP/1.1
Host: **************
Authorization: Basic *********************
Content-Type: application/json
Cache-Control: no-cache

{ "title": "тест", "content": "тест", "status": "private", "excerpt": "тест" }

При тестировании локально на моем сервере всё работает нормально, но на VPS я получаю следующую ошибку:

{
    "code": "rest_cannot_create",
    "message": "Извините, вам не разрешено создавать записи под этим пользователем",
    "data": {
        "status": 401
    }
}

Я знаю, что учетные данные пользователя верны, и пользователю разрешено создавать записи.

Я подозреваю, что заголовок аутентификации теряется где-то до того, как доходит до REST API. Но с чего начать отладку? Какие логи проверить?

0
Все ответы на вопрос 3
1

Заголовок Authorization обычно удаляется сервером Apache.

Это можно исправить с помощью .htaccess:

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
9 авг. 2018 г. 03:18:59
Комментарии

Это было сложно найти. Спасибо!

Álvaro Franz Álvaro Franz
11 нояб. 2024 г. 23:40:53
3

Если вы здесь, потому что уже перепробовали всё и всё равно не можете создавать ресурсы через WordPress REST API, позвольте поделиться тем, что сработало у меня.

Прежде всего, дам немного контекста: я развернул WordPress на инстансе AWS с помощью Bitnami.

Затем установил WooCommerce и включил его API для тестирования в песочнице. Сразу после этого я попытался создавать продукты через Postman, но постоянно получал ошибки типа "woocommerce_rest_cannot_create" ("Извините, вам не разрешено создавать ресурсы."). Я пробовал разные методы аутентификации, такие как OAuth и Basic Auth, но ни один не сработал.

Тогда я подумал, что, возможно, стоит попробовать эндпоинты WordPress API (вместо эндпоинтов WooCommerce), чтобы проверить, смогу ли я создавать записи или пользователей, но и это не сработало. Я получал ошибки:

  • "rest_cannot_create" ("Извините, вам не разрешено создавать записи от имени этого пользователя.")
  • "rest_cannot_create_user" ("Извините, вам не разрешено создавать новых пользователей.")

Вот что помогло мне:

  • Установите плагин Basic Auth. Вы можете установить его, клонировав репозиторий в /opt/bitnami/apps/wordpress/htdocs/wp-content/plugins, а затем активировав его на странице плагинов в админке WordPress. Или скачайте репозиторий как ZIP-архив и установите через загрузку файла на странице плагинов в админке WordPress.
  • Настройте Postman (или любой другой инструмент, который вы используете для отправки запросов) на использование Basic Auth. Используйте данные существующего пользователя с правами администратора.
  • Отредактируйте файл .htaccess, расположенный в /opt/bitnami/apps/wordpress/htdocs (этот файл скрытый, не пугайтесь, если не видите его).
  • Добавьте новую строку после RewriteEngine On и вставьте RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}], сохраните и закройте файл.
  • Отредактируйте /opt/bitnami/apps/wordpress/conf/httpd-app.conf, добавьте новую строку после RewriteEngine On.
  • В новой строке вставьте: RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}], сохраните и закройте файл.
  • Перезапустите Apache: sudo /opt/bitnami/ctlscript.sh restart apache
  • (ОПЦИОНАЛЬНО) Установите Application Passwords от George Stephanis.

После этого я снова попробовал отправить запрос через Postman, и всё заработало идеально.

Подробнее можно посмотреть здесь: https://community.bitnami.com/t/setting-up-api-access-to-wordpress-on-aws-ec2-instance/60589/7

6 авг. 2019 г. 05:18:05
Комментарии

дружище, ты только что спас мне два дня

Codecraker Codecraker
23 июн. 2020 г. 23:16:27

Рад это слышать, @Codecraker :-)

Antony Fuentes Antony Fuentes
25 июн. 2020 г. 00:11:37

Выполнил все шаги, но безрезультатно :-(

Sohail Ahmed Sohail Ahmed
28 сент. 2020 г. 14:13:49
0

Для меня решением оказалось создание и использование WordPress Application Password вместо обычного пароля для входа. Обычный пароль не работал через API.

Application Passwords были введены в WordPress 5.6, поэтому для некоторых это может быть относительно новым: https://make.wordpress.org/core/2020/11/05/application-passwords-integration-guide/

21 апр. 2023 г. 16:54:55