Как войти через WordPress API и получить данные пользователя?

19 авг. 2018 г., 05:33:04
Просмотры: 17.2K
Голосов: 1

Я хочу войти через WordPress API. Пробовал использовать "/wp-json/wp/v2/users", но он возвращает только данные пользователя с ID 1.

Моя цель - войти через API и получить всю информацию профиля.

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

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. Таким образом, вы получите токен, как показано на изображении: Postman и JWT аутентификация
Теперь используйте этот токен для получения данных авторизованного пользователя, например:
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) Получение данных пользователя

26 янв. 2019 г. 23:39:43
0

Привет, у меня есть более быстрый и эффективный способ получить 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

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

24 июн. 2020 г. 16:39:59
7
-3

Решено:

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; // Возврат метаданных
}
19 авг. 2018 г. 06:54:35
Комментарии

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

Jacob Peattie Jacob Peattie
19 авг. 2018 г. 07:23:45

На самом деле, я хочу вызывать это из Android.

Mohammad Shahnewaz Sarker Mohammad Shahnewaz Sarker
19 авг. 2018 г. 07:30:54

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

Jacob Peattie Jacob Peattie
19 авг. 2018 г. 07:33:36

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

Betty Betty
30 мар. 2019 г. 03:42:34

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

Mohammad Shahnewaz Sarker Mohammad Shahnewaz Sarker
21 окт. 2019 г. 11:27:18

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

james-geldart james-geldart
1 окт. 2021 г. 15:49:16

Фактически, лучшее решение (для нашего случая использования) может заключаться в использовании wp_authenticate вместо wp_signon, так как это не создаст сессию входа, которая теоретически может быть перехвачена

james-geldart james-geldart
1 окт. 2021 г. 15:55:44
Показать остальные 2 комментариев