Как получить информацию о пользователе, вошедшем в систему, с помощью аутентификации JWT?

#php #wordpress #jwt #wordpress-rest-api

#php #wordpress #jwt #wordpress-rest-api

Вопрос:

В моем проекте WordPress REST API мне нужно получить данные пользователя, вошедшего в систему, через api. Я использовал плагин JWT Authentication for WP REST API для генерации токенов. Я сгенерировал токены с параметрами имени пользователя и пароля пользователя. введите описание изображения здесь

Теперь, используя эти токены, я создал одну функцию в своем файле api, но она отправляет мне 0 ответ api в postman с приведенными ниже заголовками.

 'Content-type': 'application/json', 
'Authorization': 'Bearer token_value'
  

Код функции:

 function get_loggedin_user_info(){
  global $current_user; 

  $current_user = wp_get_current_user();
  print_r($current_user);
}

add_action( 'rest_api_init', function () {
    register_rest_route( 'endpoints/v1', '/logininfo', array(
            'methods' => 'POST',
            'callback' => 'get_loggedin_user_info'
    ));
});
  

Итак, как я могу получить данные зарегистрированных пользователей с помощью WordPress hook wp_get_current_user()

Во-вторых, как я могу создать jwt-auth/v1/token API, который будет получать имя пользователя и пароль как динамические?

P.S Я добавил RewriteCond и RewriteRule в файл htacceess, а также включил секретный ключ аутентификации JWT в свой конфигурационный файл.

 define('JWT_AUTH_SECRET_KEY', 'secret-key');
define('JWT_AUTH_CORS_ENABLE', true);
  

Ответ №1:

Имейте в виду, что вы также можете изменить ответ JWT при успешном входе в систему:

 function mod_jwt_auth_token_before_dispatch( $data, $user ) {
    $user_info = get_user_by( 'email',  $user->data->user_email );
    $profile = array (
        'id' => $user_info->id,
        'user_first_name' => $user_info->first_name,
        'user_last_name' => $user_info->last_name,
        'user_email' => $user->data->user_email,
        'user_nicename' => $user->data->user_nicename,
        'user_display_name' => $user->data->display_name,
        'phone' => get_field( 'phone', "user_$user_info->id" ) // you also can get ACF fields
    );
    $response = array(
        'token' => $data['token'],
        'profile' => $profile
    );
    return $response;
}
add_filter( 'jwt_auth_token_before_dispatch', 'mod_jwt_auth_token_before_dispatch', 10, 2 );
  

Таким образом, вам не нужно вызывать другую конечную точку, чтобы получить больше данных от пользователя.

Когда пользователь возвращается на ваш сайт / приложение, не забудьте сначала проверить токен, а затем вызвать /users/me конечную точку.

Опять же, если вы хотите вернуть дополнительную информацию users/me , вы можете это сделать:

     function add_custom_fields() {
        register_rest_field(
            'user', 
            'profile',
            array(
                'get_callback'    => 'get_custom_fields',
                'update_callback' => null,
                'schema'          => null,
            )
        );
    }
    add_action( 'rest_api_init', 'add_custom_fields' );

    function get_custom_fields( $object, $field_name, $request ) {
        $user_info = get_user_by( 'id',  $object['id'] );
        $profile = array (
            'id' => $user_info->id,
            'user_first_name' => $user_info->first_name,
            'user_last_name' => $user_info->last_name,
            'user_email' => $user_info->user_email,
            'user_nicename' => $user_info->user_nicename,
            'user_display_name' => $user_info->display_name,
        );
        return $profile;
    }
  

Комментарии:

1. Zoix я намерен, чтобы пользователи / я возвращали больше данных, но у меня есть несколько вопросов, куда мне поместить эти фрагменты кода, functions.php ? во-вторых, повлияет ли ввод такого кода на первоначальных пользователей / меня?

2. Да, functions.php это правильное место. На ваш второй вопрос, да, это будет затронуто, но только потому, что вы добавляете больше деталей в ответ. Токен остается нетронутым.

3. понятный помощник, чистое и ясное объяснение: p, спасибо за ваше объяснение, это мне очень поможет, спасибо.

Ответ №2:

вы можете использовать этот маршрут: /wp-json/wp/v2/users/me

отправьте токен на этот маршрут и получите данные вашего пользователя

Я здесь, если у вас есть какие-либо вопросы 🙂