Как войти через WordPress API и получить данные пользователя?
1. Установите и активируйте плагин JWT Authentication for WP REST API, также установите плагин WP REST API.
2. Теперь вы можете запускать любые стандартные API WordPress из мобильного приложения или любого другого источника, либо через Postman. Например, обратитесь к этому URL из вашего приложения или через Postman: https://example.com/wp-json/wp/v2/posts.
3. Через приложение или Postman, когда вы войдёте с верными данными (используя REST API), вы получите токен. Для входа и получения токена выполните следующий URL через Postman или приложение:
https://example.com/wp-json/jwt-auth/v1/token.
4. Таким образом, вы получите токен, как показано на изображении:
Теперь используйте этот токен для получения данных авторизованного пользователя, например:
5. Создайте функцию в function.php:
function checkloggedinuser()
{
$currentuserid_fromjwt = get_current_user_id();
print_r($currentuserid_fromjwt);
exit;
}
add_action('rest_api_init', function ()
{
register_rest_route( 'testone', 'loggedinuser',array(
'methods' => 'POST',
'callback' => 'checkloggedinuser'
));
});
6. Теперь снова выполните этот новый URL в Postman или приложении, чтобы получить данные авторизованного пользователя.
https://example.com/wp-json/testone/loggedinuser
(замените example.com на ваш URL)

Привет, у меня есть более быстрый и эффективный способ получить ID пользователя и другие данные, такие как аватар пользователя.
Просто добавьте этот код в файл functions.php:
/*
* Добавляем дополнительные данные в плагин JWT Auth
*/
function jwt_auth_function($data, $user) {
$data['user_role'] = $user->roles;
$data['user_id'] = $user->ID;
$data['avatar']= get_avatar_url($user->ID);
return $data;
}
add_filter( 'jwt_auth_token_before_dispatch', 'jwt_auth_function', 10, 2 );
Ссылка: Как получить ID пользователя через API
Надеюсь, это поможет

Решено:
add_action( 'rest_api_init', 'register_api_hooks' );
function register_api_hooks() {
register_rest_route(
'custom-plugin', '/login/',
array(
'methods' => 'POST', // Метод запроса
'callback' => 'login', // Функция обратного вызова
)
);
}
function login($request){
$creds = array(); // Инициализация массива учетных данных
$creds['user_login'] = $request["username"]; // Логин пользователя
$creds['user_password'] = $request["password"]; // Пароль пользователя
$creds['remember'] = true; // Запомнить пользователя
$user = wp_signon( $creds, true ); // Авторизация пользователя
if ( is_wp_error($user) ) // Если ошибка авторизации
echo $user->get_error_message(); // Вывод сообщения об ошибке
$id = $user->ID; // Получение ID пользователя
$meta = get_user_meta($id); // Получение метаданных пользователя
return $meta; // Возврат метаданных
}

Это очень небезопасно. Вы передаете имя пользователя и пароль открыто в URL.

Это не имеет значения. Пожалуйста, прочитайте ссылку на документацию, которую я оставил в комментарии. Существуют правильные и более безопасные способы сделать это.

@JacobPeattie Будет ли нормально, если мы используем POST вместо GET? Ссылка на документацию WP, которую вы дали, на самом деле была первым местом, куда я обратился, но там, кажется, ничего не сказано о том, как выполнить вход.

@Jacob, Данные методом Post. Так что это безопасно.

Это может подойти для нашего случая использования: позволить пользователям нашего серверного приложения прозрачно входить с их учетными данными Wordpress. Мы будем передавать данные напрямую с сервера на сервер к WP для аутентификации в начале сессии, а затем кэшировать данные пользователя в нашей базе данных. Таким образом, мы выполняем базовую аутентификацию только один раз за сессию через доверенное соединение, что обходит проблемы безопасности, так как клиентское устройство отправляет учетные данные только один раз. В качестве дополнительной меры безопасности мы потребуем общий секретный ключ либо в заголовке, либо как часть запроса.
