Изменение пароля пользователя REST API

Вопрос или проблема

Изменение пароля пользователя REST API

Я пытаюсь позволить пользователю изменить свой пароль через API. Здесь, похоже, я могу отправить POST-запрос к конечной точке пользователей с его идентификатором пользователя в конце, отправляя новый пароль в теле запроса в формате JSON. Итак,

POST на: https://example.com/wp-json/wp/v2/users/123

А в теле:

{
    "password": "mySecretPassword"
}

В данном случае пользователь аутентифицирован через JWT и должен отправить токен в заголовке запроса.

Когда я пробовал это в Postman, запрос зависал на довольно долгое время, но, в конце концов, кажется, проходит, и пароль обновляется.

Я хотел бы знать, делаю ли я это правильно, и если да, то почему это занимает так много времени?

Этот вопрос был задан 9 месяцев назад, и, возможно, он решен сейчас. Но я отправлю ответ, чтобы помочь другим людям, которые могут задать этот вопрос:
Вы должны установить плагин JWT. Затем вам нужно создать Bearer Token, отправив имя пользователя и пароль по этому адресу:
https://example.com/wp-json/jwt-auth/v1/token

В Postman вам нужно вставить ваш Bearer Token на вкладке Auth и изменить ваш пароль, отправив запрос по этому адресу:
http://example.com/wp-json/wp/v2/users/123?password=newpassword
(123 – это пример идентификатора пользователя.)

Я создаю API для восстановления пароля в WordPress в реальном времени, используя

ссылку на сайт: Linuxtips

function frgpassword(){
   global $wpdb, $wp_hasher;

   $methode = $_GET; 
   if(empty($methode['username'])){
       $response = [ 'error' => true, 'code' => 400, "message" => "Введите имя пользователя или зарегистрированный email" ];
   } else {
       $custom_users_table = CUSTOM_USER_TABLE;
       $sql = $wpdb->prepare( "SELECT * FROM `{$custom_users_table}` WHERE `user_login` = %s OR `user_email` = %s;", array( $methode['username'], $methode['username'] ) );
       $userdata = $wpdb->get_results($sql);
       if(empty($userdata)){
          $response = [ 'error' => true, 'code' => 404, "message" => "Пользователь не найден {$methode['username']}" ]; 
       } else {
           $user = $userdata['0'];

           $allow = apply_filters( 'allow_password_reset', (is_multisite() && is_user_spammy( $user )) ? false : true, $user->ID );
           if ( ! $allow ) {
               $response = [ 'error' => true, 'code' => 403, "message" => "Сброс пароля не разрешен для этого пользователя" ]; 
           } else {
              $key = wp_generate_password( 20, false );  
              do_action( 'retrieve_password_key', $user->user_login, $key );
              if ( empty( $wp_hasher ) ) {
                   require_once ABSPATH . WPINC . '/class-phpass.php';
                   $wp_hasher = new PasswordHash( 8, true );
              }
              // обновление нового пароля в базе данных
              $wpdb->query($wpdb->prepare("UPDATE {$custom_users_table} SET user_activation_key= %s WHERE ID = %s"), array((time() . ':' . $wp_hasher->HashPassword( $key )), $user->ID));
              $link = home_url("wp-login.php?action=rp&key={$key}&login={$user->user_login}&wp_lang=en_US");

              $message = "Кто-то запросил сброс пароля для следующей учетной записи: \n Имя сайта: ".get_bloginfo()." из мобильного приложения \n \n Имя пользователя: {$user->user_login} \n Если это была ошибка, проигнорируйте это письмо, и ничего не произойдет. \n Чтобы сбросить ваш пароль, перейдите по следующему адресу: \n {$link} \n Этот запрос на сброс пароля был инициирован с IP-адреса ".ns_wp_user_ip();
              $headers = array('From: '.get_bloginfo()." Мобильное приложение ".' ');

              wp_mail($user->user_email,"[".get_bloginfo()."] Сброс пароля",$message,$headers);
              $response = [ 'error' => false, 'code' => 200, "message" => "Ссылка для сброса пароля была отправлена на ваш зарегистрированный email" ];
           }
       }
   }
   return new WP_REST_Response($response, $response['code']);
}

Создание REST маршрута

register_rest_route('neoistone/v2', '/frgpassword', array(
      'methode' => "GET",
      'callback' => "frgpassword",
      "permission_callback" => "frgpassword"
  ));

Ответ или решение

Для изменения пароля пользователя через REST API в WordPress есть несколько этапов, которые нужно пройти, чтобы все работало корректно. Давайте подробно рассмотрим этот процесс.

Шаг 1: Установка и настройка плагина

  1. Убедитесь, что у вас установлен плагин JWT Authentication for WP REST API. Он необходим для аутентификации запросов с помощью токенов.

Шаг 2: Получение токена

Для изменения пароля пользователю требуется аутентификация. Для этого следует получить Bearer Token:

  1. Отправьте POST-запрос на адрес:
    https://example.com/wp-json/jwt-auth/v1/token
  2. В теле запроса передайте имя пользователя и пароль в формате JSON:
    {
       "username": "ваше_имя_пользователя",
       "password": "ваш_пароль"
    }
  3. В ответ вы получите токен, который будет необходим для дальнейших запросов.

Шаг 3: Изменение пароля

Для изменения пароля выполните следующие шаги:

  1. Отправьте POST-запрос на адрес:

    https://example.com/wp-json/wp/v2/users/123

    Где 123 — это ID пользователя, чей пароль вы хотите изменить.

  2. В заголовок запроса добавьте Authorization: Bearer ваш_токен, полученный на предыдущем шаге.

  3. В теле запроса передайте новый пароль в следующем формате JSON:
    {
       "password": "новый_пароль"
    }

Пример запроса в Postman

  • Method: POST
  • URL: https://example.com/wp-json/wp/v2/users/123
  • Headers:
    Authorization: Bearer ваш_токен
    Content-Type: application/json
  • Body (JSON):
    {
      "password": "новый_пароль"
    }

Замечание о времени ожидания

Если ваш запрос долго обрабатывается, это может быть связано с несколькими факторами:

  1. Настройки сервера: Проверьте ограничения по времени выполнения запросов на вашем сервере (например, max_execution_time в PHP).

  2. Загрузка сервера: Если сервер перегружен или дело касается базы данных с большим объемом данных, это может отразиться на производительности.

  3. Проблемы с сетью: Иногда задержка может быть вызвана сетью или вашим интернет-соединением.

  4. Плагины и темы: Некоторые плагины или темы могут оказывать влияние на производительность вашего сайта. Отключите плагины, которые могут конфликтовать.

Заключение

Следуя приведённым выше шагам, вы сможете изменить пароль пользователя через REST API в WordPress. Если вы столкнулись с длительным временем ожидания, проанализируйте настройки сервера, загрузку и плагины, чтобы выявить причину проблемы.

Оцените материал
Добавить комментарий

Капча загружается...