Вопрос или проблема
Я пытаюсь получить список всех пользователей (не только авторов). У меня есть следующий скрипт в Codeigniter 4:
class WPUserModel extends Model
{
protected $wordpressApiUrl="https://blog.example.com/wp-json/wp/v2/users";
protected $username="exampleapp";
protected $applicationPassword = 'xxxx yyyy zzzz aaaa bbbb cccc';
public function getAllUsers(): array
{
$client = \Config\Services::curlrequest();
$authHeader="Basic " . base64_encode("{$this->username}:{$this->applicationPassword}");
echo $authHeader;
$users = [];
$page = 1;
$perPage = 100;
try {
while (true) {
$response = $client->request('GET', $this->wordpressApiUrl, [
'headers' => [
'Authorization' => $authHeader,
],
'query' => [
'per_page' => $perPage,
'page' => $page,
'context' => 'edit',
],
]);
$data = json_decode($response->getBody(), true);
if (empty($data)) {
break;
}
$users = array_merge($users, $data);
$page++;
}
} catch (HTTPException $e) {
log_message('error', 'HTTP error: ' . $e->getMessage());
print_r( $e->getMessage());
return [];
} catch (\Exception $e) {
log_message('error', 'An error occurred: ' . $e->getMessage());
print_r( $e->getMessage());
return [];
}
return $users;
}
}
Вышеуказанное дает следующее сообщение:
Запрашиваемый URL вернул ошибку: 401
Когда я запускаю это из командной строки, я получаю то же сообщение.
{"code":"rest_forbidden_context","message":"Извините, у вас нет прав на список пользователей.","data":{"status":401}}
Я использую пользователя, у которого есть права администратора, и имя пользователя и пароль приложения.
Кстати, wordpress выдает пароль приложения с пробелами. Я пробовал с пробелами и без них, но без успеха.
Как я могу получить список всех пользователей? Буду признателен за любые советы.
Ответ или решение
Как получить список всех пользователей в WordPress 6.7: решение проблемы "Вы не имеете права просматривать пользователей"
При работе с API WordPress, возможны ситуации, когда вы сталкиваетесь с ошибкой доступа, в частности с сообщением: {"code":"rest_forbidden_context","message":"Sorry, you are not allowed to list users.","data":{"status":401}}
. Это означает, что вы, вероятно, не имеете достаточных прав для получения списка всех пользователей, даже если ваш аккаунт обладает административными привилегиями.
Обзор проблемы
В вашем коде на CodeIgniter 4 использование учетной записи с административными правами и приложенного пароля не приводит к ожидаемому результату. Кодирование авторизации через заголовок, как показано в вашем примере, верно, но ключевыми факторами здесь являются:
- Права API: Недостаточно иметь административные права в панели управления WordPress; необходимо, чтобы учетная запись имела доступ ко всем пользователям через API.
- Обращение к правильному контексту: WordPress использует контексты (например,
edit
) для определения, какие данные могут быть получены в зависимости от прав доступа.
Решение проблемы
-
Проверьте настройки API в WordPress:
Убедитесь, что ваш токен приложения настроен правильно и имеет необходимые права для доступа к информации о пользователях. Это можно сделать следующим образом:- Перейдите в → Пользователи → Ваш профиль и проверьте параметры API для вашего приложения.
- Если возможно, настройте учетную запись с более высокими привилегиями.
-
Использование правильного контекста:
Хотя ваш код содержит параметрcontext
со значениемedit
, рекомендуется использоватьview
или удалить его вообще для запроса списка пользователей. Пример:'query' => [ 'per_page' => $perPage, 'page' => $page, ],
-
Удаление пробелов в пароле приложения:
Несмотря на то, что вы пробовали делать это раньше, убедитесь, что вы правильно используете пароль приложения. Важно ли действительно исключить пробелы не будет видно, если вы не протестировали это с трех разных учетных записей тремя разными приложениями. -
Отладка через cURL или Postman:
Чтобы диагностировать проблему, попробуйте сделать аналогичный запрос через cURL или Postman с той же аутентификацией. Это поможет определить, на стороне сервера или клиента возникает ошибка.
Пример команды cURL:
curl -X GET "https://blog.example.com/wp-json/wp/v2/users" \
-H "Authorization: Basic $(echo -n 'exampleapp:xxxx yyyy zzzz aaaa bbbb cccc' | base64)"
Заключение
Если после выполнения вышеуказанных шагов ошибка 401
все еще возникает, возможно, будет целесообразно воспользоваться плагинами, обеспечивающими расширенные возможности управления пользователями через REST API. Некоторые плагины могут предложить дополнительные настройки прав доступа, что расширит функциональность для работы с API.
После устранения всех возможных причин вы сможете успешно получить список всех пользователей вашего сайта на WordPress.