Как сделать аутентификацию в php файле при использовании WP REST API?
Пишу вордпресс плагин добавляющий кнопку пайпал. В нем будет несколько php файлов не связанные с вордпресс. В интернете я встретила следующее сообщение: "вы никогда не должны делать прямые вызовы PHP-файлов внутри темы или плагина, это серьезная проблема безопасности" и там же было написано что нужно использовать WP REST API. Я сделала это и все работает. Только есть одна проблема - для получении данных при помощи WP REST API необходимы логин и пароль пользователя:
CURLOPT_USERPWD => "$login:$password"
Для проверки работы API я использовала логин и пароль, но я прочитала что этого делать в готовых проектах не рекомендуется.
Существует еще OAuth, но для него вроде бы придется использовать форму входа, что для плагина будет выглядеть странно.
Я хочу узнать - действительно ли отдельные пхп файлы не нужно подключать в вордпресс? Если они действительно должны существовать отдельно как быть с аутентификацией - потому что без нее не знаю как работать с REST API?
Дополнительно
А создать условие для работы плагина только для аунтифицированных пользователей, вера не позволяет)
А вот это "Basic Authentication with Application Passwords" работает только для приложений? Для плагинов не подходит?
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
При обращении к WP REST API из отдельного PHP-файла нужно использовать нормальную авторизацию, а не просто подключать
wp-load.phpи считать пользователя авторизованным. Для серверного запроса самый простой вариант — Application Passwords WordPress.Создайте пароль приложения в профиле пользователя WordPress и отправляйте запрос с Basic Auth:
$username = 'admin'; $app_password = 'xxxx xxxx xxxx xxxx xxxx xxxx'; $response = wp_remote_get('https://site.ru/wp-json/wp/v2/posts', [ 'headers' => [ 'Authorization' => 'Basic ' . base64_encode($username . ':' . $app_password), ], ]);
Если PHP-файл находится вне WordPress, можно использовать cURL:
$ch = curl_init('https://site.ru/wp-json/wp/v2/posts'); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Authorization: Basic ' . base64_encode($username . ':' . $app_password), ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch);
Для фронтенда Application Passwords не подходят: их нельзя отдавать в браузер. Там используют cookie + nonce для авторизованного пользователя или OAuth/JWT, если проект это требует.
Если задача — вызвать REST API внутри WordPress, чаще лучше не делать HTTP-запрос к самому себе, а вызвать нужную функцию напрямую. REST нужен для внешних клиентов и интеграций.