Intereting Posts
Объекта дизайна отчета нет. В веб-обозревателе BIRT Ошибка «Предупреждение: страница истекла» в IE при нажатии кнопки «Назад» Многие строки базы данных против одной строки разделенных запятыми строк В чем смысл имени маркера PHP T_PAAMAYIM_NEKUDOTAYIM? Каков наилучший способ сделать аутентификацию пользователя в php? создание цикла для увеличения времени на 15 минут Как получить адрес электронной почты при аутентификации пользователя с помощью Google Oauth2 и people.me Как проверить, установлен ли $ _GET , и он не пуст, используя php Доступ к переменной из области действия другой функции? Почему псевдоним столбца не работает в доктрине? Реализация входа в систему вместе с suPHP Как установить драйвер mysqlnd с помощью MAMP? Ваша версия библиотеки PHP MySQL отличается от версии вашего сервера MySQL Проблема WordPress PHP в functions.php относительно оператора if и else if Есть ли способ автоматически сделать скриншот веб-сайта через URL-адрес?

Как получить текущий зарегистрированный пользователь, используя WordPress Rest Api?

Я попытался добавить пользовательский запрос.

add_action('rest_api_init', function () { register_rest_route( 'custom', '/login', array( 'methods' => 'GET', 'callback' => function(WP_REST_Request $request) { return wp_get_current_user(); } )); }); 

Но он всегда возвращает пользователя с ID = 0; Я также пробовал:

 add_action('rest_api_init', function () { register_rest_route( 'custom', '/login', array( 'methods' => 'GET', 'callback' => function(WP_REST_Request $request) { return is_user_logged_in(); } )); }); 

И он всегда возвращает false. Но пользователь вошел в систему, чтобы убедиться.

Я добавил свой пользовательский логин

 add_action('rest_api_init', function () { register_rest_route( 'custom', '/login', array( 'methods' => 'POST', 'callback' => function(WP_REST_Request $request) { $nonce = wp_create_nonce("wp_rest"); $user = wp_signon(array('user_login' => $_POST['username'], 'user_password' => $_POST['password'], "rememberme" => true), false); if (is_wp_error($user)) { return $user; } //do_action( 'wp_login', "capad" ); //$user['isloggedin'] = is_user_logged_in(); return array('user' => $user, 'nonce' => $nonce); } )); }); 

И я добавляю «X-WP-Nonce» в качестве заголовка для HTTP-запроса

И теперь каждый запрос выводит: {"code":"rest_cookie_invalid_nonce","message":"Cookie nonce is invalid","data":{"status":403}}

В главе « Аутентификация» в Справочнике API REST :

Проверка подлинности файлов cookie является основным методом проверки подлинности, включенным в WordPress. Когда вы входите в свою панель управления, это настраивает файлы cookie правильно для вас, поэтому разработчикам плагинов и тем нужно только иметь зарегистрированного пользователя.

Однако API REST включает в себя метод, называемый nonces, чтобы избежать проблем CSRF. Это мешает другим сайтам заставить вас выполнять действия, явно не намереваясь это сделать. Это требует немного специальной обработки API.

Для разработчиков, использующих встроенный Javascript API, это обрабатывается автоматически для вас. Это рекомендуемый способ использования API для плагинов и тем. Модели пользовательских данных могут расширять wp.api.models.Base, чтобы гарантировать, что это правильно отправлено для любых пользовательских запросов.

Для разработчиков, выполняющих ручные запросы Ajax, nonce нужно будет передавать с каждым запросом. API использует nonces с действием, установленным в wp_rest . Затем их можно передать в API через параметр данных _wpnonce (либо данные POST, либо запрос запроса GET), либо через заголовок X-WP-Nonce .

Вот пример GET:

 https://example.tld/wp-json/wp/v2/users/me?_wpnonce=9467a0bf9c 

или в вашем случае:

 https://example.tld/wp-json/custom/login/?_wpnonce=9463a0bf9c 

где nonce создается из

 wp_create_nonce( 'wp_rest' ); 

Поэтому, скорее всего, вы забыли о части nonce при тестировании своей конечной точки.

Надеюсь, поможет!

Если вы предпочитаете использовать JWT Authentication для WP REST API , его может быть проще реализовать с помощью Json Web Tokens.

Сначала вы подтверждаете аутентификацию клиента, отправляющего HTTP-запрос POST в конечную точку / wp-json / jwt-auth / v1 / token, посылая поля имени пользователя и пароля для генерации токена аутентификации.

Успешный ответ будет похож на:

 { "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9qd3QuZGV2IiwiaWF0IjoxNDM4NTcxMDUwLCJuYmYiOjE0Mzg1NzEwNTAsImV4cCI6MTQzOTE3NTg1MCwiZGF0YSI6eyJ1c2VyIjp7ImlkIjoiMSJ9fX0.YNe6AyWW4B7ZwfFE5wJ0O6qQ8QFcYizimDmBy6hCH_8", "user_display_name": "admin", "user_email": "admin@localhost.dev", "user_nicename": "admin" } 

Затем вы передаете токен каждому параметру запроса заголовка запроса, например:

 Authorization: Bear eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9qd3QuZGV2IiwiaWF0IjoxNDM4NTcxMDUwLCJuYmYiOjE0Mzg1NzEwNTAsImV4cCI6MTQzOTE3NTg1MCwiZGF0YSI6eyJ1c2VyIjp7ImlkIjoiMSJ9fX0.YNe6AyWW4B7ZwfFE5wJ0O6qQ8QFcYizimDmBy6hCH_8